Dennis Sweeney <sweeney.dennis...@gmail.com> added the comment:

While trying to write tests, I stumbled across something interesting: 
_PyObject_FunctionString as discussed here ( https://bugs.python.org/issue37645 
) returns a string that also includes the module name where applicable.  For 
example, the module name is included behind the qualname in the following 
situation:

    >>> from random import Random
    >>> Random.seed(a=1, **{"a":2})
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        Random.seed(a=1, **{"a":2})
    TypeError: random.Random.seed() got multiple values for keyword argument 'a'

or:

    >>> class A:
    ...    def foo(bar):
    ...         pass
    ...
    >>> A().foo(bar=1, **{"bar":2})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __main__.A.foo() got multiple values for keyword argument 'bar'

>From what I can tell, this seems to happen mostly during the CALL_FUNCTION_EX 
>instruction (unpacking *args and **kwargs), while we don't get this level of 
>qualification during the actual do_call_core. Maybe _PyObject_FunctionString 
>should ideally be used everywhere applicable, but there seems to be a 
>different issue with that: the _PyEval_EvalCode function where the error 
>handling occurs doesn't receive a reference to the function, only references 
>to the function's code object and qualname (unless I'm missing to something).

Should the signature of _PyEval_EvalCode be modified? Or should we be satisfied 
with the half-measure of including the qualname but not the module (at least 
for now)? Is there a good reason for the different qualifiers for functions 
when encountering different types of invalid arguments?

There's also a block that I couldn't figure out how to reach in tests from 
Python code: at 
https://github.com/python/cpython/blob/master/Python/ceval.c#L4233 ("keywords 
must be strings" when passing as two arrays), I don't know how to reach this 
code in a way that isn't a SyntaxError first.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40679>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to