Issue #23934: Fix inspect.signature to fail correctly for builtin types.
Initial patch by James Powell.
This commit is contained in:
parent
dce09c34a0
commit
bf304fcb32
|
@ -2255,9 +2255,13 @@ def _signature_from_callable(obj, *,
|
||||||
if type not in obj.__mro__:
|
if type not in obj.__mro__:
|
||||||
# We have a class (not metaclass), but no user-defined
|
# We have a class (not metaclass), but no user-defined
|
||||||
# __init__ or __new__ for it
|
# __init__ or __new__ for it
|
||||||
if obj.__init__ is object.__init__:
|
if (obj.__init__ is object.__init__ and
|
||||||
|
obj.__new__ is object.__new__):
|
||||||
# Return a signature of 'object' builtin.
|
# Return a signature of 'object' builtin.
|
||||||
return signature(object)
|
return signature(object)
|
||||||
|
else:
|
||||||
|
raise ValueError(
|
||||||
|
'no signature found for builtin type {!r}'.format(obj))
|
||||||
|
|
||||||
elif not isinstance(obj, _NonUserDefinedCallables):
|
elif not isinstance(obj, _NonUserDefinedCallables):
|
||||||
# An object with __call__
|
# An object with __call__
|
||||||
|
|
|
@ -1980,9 +1980,14 @@ class TestSignatureObject(unittest.TestCase):
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_signature_on_builtins_no_signature(self):
|
def test_signature_on_builtins_no_signature(self):
|
||||||
import _testcapi
|
import _testcapi
|
||||||
with self.assertRaisesRegex(ValueError, 'no signature found for builtin'):
|
with self.assertRaisesRegex(ValueError,
|
||||||
|
'no signature found for builtin'):
|
||||||
inspect.signature(_testcapi.docstring_no_signature)
|
inspect.signature(_testcapi.docstring_no_signature)
|
||||||
|
|
||||||
|
with self.assertRaisesRegex(ValueError,
|
||||||
|
'no signature found for builtin'):
|
||||||
|
inspect.signature(str)
|
||||||
|
|
||||||
def test_signature_on_non_function(self):
|
def test_signature_on_non_function(self):
|
||||||
with self.assertRaisesRegex(TypeError, 'is not a callable object'):
|
with self.assertRaisesRegex(TypeError, 'is not a callable object'):
|
||||||
inspect.signature(42)
|
inspect.signature(42)
|
||||||
|
|
|
@ -31,6 +31,9 @@ Library
|
||||||
|
|
||||||
- Issue #16991: Add a C implementation of OrderedDict.
|
- Issue #16991: Add a C implementation of OrderedDict.
|
||||||
|
|
||||||
|
- Issue #23934: Fix inspect.signature to fail correctly for builtin types
|
||||||
|
lacking signature information. Initial patch by James Powell.
|
||||||
|
|
||||||
|
|
||||||
What's New in Python 3.5.0 beta 1?
|
What's New in Python 3.5.0 beta 1?
|
||||||
==================================
|
==================================
|
||||||
|
|
Loading…
Reference in New Issue