-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
While working on #103553 I found one more problem that merits its own issue.
Right now it is impossible to create a function that have a pos-or-keyword parameter without a default comming after a pos-only parameter with a default. Demo:
>>> def test(pod=42, /, pk): ...
File "<stdin>", line 1
def test(pod=42, /, pk): ...
^^
SyntaxError: parameter without a default follows parameter with a default
>>> lambda pod=42, /, pk: ...
File "<stdin>", line 1
lambda pod=42, /, pk: ...
^^
SyntaxError: parameter without a default follows parameter with a default
But, it is possible to create a signature like this. Repro:
>>> import inspect
>>> def one(pk): ...
...
>>> def two(pod=42, /): ...
...
>>> sig1 = inspect.signature(one)
>>> sig2 = inspect.signature(two)
>>> inspect.Signature((sig2.parameters['pod'], sig1.parameters['pk']))
<Signature (pod=42, /, pk)>
This looks like a bug to me, there's no reason for a signature to behave differently and to support function signatures that cannot be created.
Desired behaviour:
Traceback (most recent call last):
File "/Users/sobolev/Desktop/cpython/ex.py", line 7, in <module>
print(inspect.Signature((sig2.parameters['pod'], sig1.parameters['pk'])))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/sobolev/Desktop/cpython/Lib/inspect.py", line 3039, in __init__
raise ValueError(msg)
ValueError: non-default argument follows default argument
The fix is quite easy. PR is incomming.
I've also tried the same thing with #103404 (because it is very related) but, it still does not solve this corner case.
Linked PRs
Gouvernathor
Metadata
Metadata
Assignees
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error