You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
inspect.signature() raises RuntimeError on failed to resolve the default argument value #87284
inspect.signature() raises RuntimeError on failed to resolve the default argument value. For example, it fails to inspect a subclass of io.BufferedReader:
Example:
import inspect
import io
class MyBufferedReader(io.BufferedReader):
"""buffer reader class."""
inspect.signature(MyBufferedReader)
Result:
Traceback (most recent call last):
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2042, in wrap_value
value = eval(s, module_dict)
File "<string>", line 1, in <module>
NameError: name 'DEFAULT_BUFFER_SIZE' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2045, in wrap_value
value = eval(s, sys_module_dict)
File "<string>", line 1, in <module>
NameError: name 'DEFAULT_BUFFER_SIZE' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/tkomiya/work/tmp/doc/example.py", line 9, in <module>
inspect.signature(MyBufferedReader)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 3130, in signature
return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2879, in from_callable
return _signature_from_callable(obj, sigcls=cls,
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2397, in _signature_from_callable
return _signature_fromstr(sigcls, obj, text_sig)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2095, in _signature_fromstr
p(name, default)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2077, in p
default_node = RewriteSymbolics().visit(default_node)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/ast.py", line 407, in visit
return visitor(node)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2069, in visit_Name
return wrap_value(node.id)
File "/Users/tkomiya/.pyenv/versions/3.9.1/lib/python3.9/inspect.py", line 2047, in wrap_value
raise RuntimeError()
RuntimeError
In my investigation, inspect.signature() tries to evaluate the default argument value of the class constructor. But it fails to evaluate because of the 2nd argument of the constructor takes a constant; DEFAULT_BUFFER_SIZE, but it is not found on the current context.
I think it would be better to search the constants for the modules of the base classes. I just made a simple patch to resolve this bug.
New changeset 9e3ff82 by Miss Islington (bot) in branch '3.9': bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285) 9e3ff82
New changeset 83aef4d by Miss Islington (bot) in branch '3.10': bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285) (bpo-30765) 83aef4d
Activity
tk0miya commentedon Feb 3, 2021
inspect.signature() raises RuntimeError on failed to resolve the default argument value. For example, it fails to inspect a subclass of io.BufferedReader:
Example:
Result:
In my investigation, inspect.signature() tries to evaluate the default argument value of the class constructor. But it fails to evaluate because of the 2nd argument of the constructor takes a constant;
DEFAULT_BUFFER_SIZE, but it is not found on the current context.I think it would be better to search the constants for the modules of the base classes. I just made a simple patch to resolve this bug.
tk0miya commentedon Feb 3, 2021
FWIW, I succeeded to inspect the class with importing the constant from the base module as a workaround:
gvanrossum commentedon Jan 21, 2022
New changeset 881a763 by Weipeng Hong in branch 'main':
bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285)
881a763
miss-islington commentedon Jan 21, 2022
New changeset 9e3ff82 by Miss Islington (bot) in branch '3.9':
bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285)
9e3ff82
gvanrossum commentedon Jan 22, 2022
New changeset 83aef4d by Miss Islington (bot) in branch '3.10':
bpo-43118: Fix bug in inspect.signature around 'base.__text_signature__' (GH-30285) (bpo-30765)
83aef4d
zhuofeng6 commentedon Sep 9, 2022
any question about this issue? if not, i think it is better to close it
gvanrossum commentedon Sep 9, 2022
Looks like this was fixed in 3.9, the repro doesn't raise there.