Repository navigation
inspect.signature(bytes.hex) raises ValueError "builtin has invalid signature" #87233
Description
Activity
On Python 3.9
>>> import inspect >>> inspect.signature(bytes.hex) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.9/inspect.py", line 3118, in signature return Signature.from_callable(obj, follow_wrapped=follow_wrapped) File "/usr/lib/python3.9/inspect.py", line 2867, in from_callable return _signature_from_callable(obj, sigcls=cls, File "/usr/lib/python3.9/inspect.py", line 2322, in _signature_from_callable return _signature_from_builtin(sigcls, obj, File "/usr/lib/python3.9/inspect.py", line 2135, in _signature_from_builtin return _signature_fromstr(cls, func, s, skip_bound_arg) File "/usr/lib/python3.9/inspect.py", line 2005, in _signature_fromstr raise ValueError("{!r} builtin has invalid signature".format(obj)) ValueError: <method 'hex' of 'bytes' objects> builtin has invalid signature
This is also true for memoryview.hex and bytearray.hex . This happens because
>>> bytes.hex.__text_signature__ '($self, /, sep=<unrepresentable>, bytes_per_sep=1)'when it would make more sense for it to return
'($self, /, sep='', bytes_per_sep=1)'
or at least sep=None
- added3.10 (EOL)end of lifeend of lifestdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancementA feature request or enhancement
on Jan 29, 2021 I am looking at this because I realized it's preventing us from testing some signatures in typeshed.
I got this to work:
>>> import inspect >>> inspect.signature(bytes.hex) <Signature (self, /, sep=Ellipsis, bytes_per_sep=1)>But it feels wrong to claim
Ellipsisas the default, because that's not really true. A more principled solution would be to add aParameter.unrepresentablemarker and use that as the default, but that feels like a change we can make only in 3.13, not in the bugfix branches.My leaning is to apply the fix suggested above in 3.13, and put some hack in stubtest (or other tools that want to inspect signatures) to make it work on earlier versions.
@serhiy-storchaka said that future
inspect.signatures()is a better solution. But, it is in the works.- added a commit that references this issue
on Nov 9, 2023 - added a commit that references this issue
on Nov 18, 2023
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsNo status
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: