With patch for the zlib module (issue20193) which uses the "unspecified" default value:
$ ./python -m pydoc zlib
Traceback (most recent call last):
File "/home/serhiy/py/cpython/Lib/inspect.py", line 1997, in wrap_value
value = eval(s, module_dict)
File "<string>", line 1, in <module>
NameError: name 'unspecified' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2000, in wrap_value
value = eval(s, sys_module_dict)
File "<string>", line 1, in <module>
NameError: name 'unspecified' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/serhiy/py/cpython/Lib/runpy.py", line 189, in _run_module_as_main
"__main__", mod_spec)
File "/home/serhiy/py/cpython/Lib/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 2593, in <module>
cli()
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 2558, in cli
help.help(arg)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 1840, in help
elif request: doc(request, 'Help on %s:', output=self._output)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 1578, in doc
pager(render_doc(thing, title, forceload))
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 1571, in render_doc
return title % desc + '\n\n' + renderer.document(object, name)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 356, in document
if inspect.ismodule(object): return self.docmodule(*args)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 1142, in docmodule
contents.append(self.document(value, key, name))
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 358, in document
if inspect.isroutine(object): return self.docroutine(*args)
File "/home/serhiy/py/cpython/Lib/pydoc.py", line 1323, in docroutine
signature = inspect.signature(object)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 1468, in signature
return Signature.from_builtin(obj)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2052, in from_builtin
p(name, default)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2038, in p
default_node = RewriteSymbolics().visit(default_node)
File "/home/serhiy/py/cpython/Lib/ast.py", line 245, in visit
return visitor(node)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2030, in visit_Name
return wrap_value(node.id)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2002, in wrap_value
raise RuntimeError()
RuntimeError
|
Seems this is related issue:
>>> import zlib, inspect
>>> zlib.compressobj.__text_signature__
'(level=Z_DEFAULT_COMPRESSION, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY, zdict=None)'
>>> str(inspect.signature(zlib.compressobj))
'(level=-1, method=8, wbits=15, memLevel=8, strategy=0, zdict=None)'
help(zlib.compress) shows the '(bytes, level=-1)' signature.
inspect.signature() evaluates default values and instead of expected named constant it outputs numeric value which is often implementation detail.
|
> Yes, that is how it must work. This is symmetric with pure Python
functions:
This is because in pure Python functions we have no enough information. I
believe than origin expression is more useful in the help. Compare:
>>> import re, inspect
>>> p = re.compile('')
>>> p.match.__text_signature__
'(string, pos=0, endpos=sys.maxsize)'
>>> str(inspect.signature(p.match))
'(string, pos=0, endpos=2147483647)'
> I suspect the problem is, you misspelled one of the expressions you provided
> as a default value.
>>> import zlib, inspect
>>> zlib.decompress.__text_signature__
'(data, wbits=unspecified, bufsize=unspecified)'
>>> str(inspect.signature(zlib.decompress))
Traceback (most recent call last):
File "/home/serhiy/py/cpython/Lib/inspect.py", line 1997, in wrap_value
value = eval(s, module_dict)
File "<string>", line 1, in <module>
NameError: name 'unspecified' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2000, in wrap_value
value = eval(s, sys_module_dict)
File "<string>", line 1, in <module>
NameError: name 'unspecified' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/serhiy/py/cpython/Lib/inspect.py", line 1468, in signature
return Signature.from_builtin(obj)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2052, in from_builtin
p(name, default)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2038, in p
default_node = RewriteSymbolics().visit(default_node)
File "/home/serhiy/py/cpython/Lib/ast.py", line 245, in visit
return visitor(node)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2030, in visit_Name
return wrap_value(node.id)
File "/home/serhiy/py/cpython/Lib/inspect.py", line 2002, in wrap_value
raise RuntimeError()
RuntimeError
|