cpython: b19d76d9d2a7 (original) (raw)
--- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -943,8 +943,14 @@ def getcallargs(func, *positional, **nam f_name, 'at most' if defaults else 'exactly', num_args, 'arguments' if num_args > 1 else 'argument', num_total)) elif num_args == 0 and num_total:
raise TypeError('%s() takes no arguments (%d given)' %[](#l1.7)
(f_name, num_total))[](#l1.8)
if varkw:[](#l1.9)
if num_pos:[](#l1.10)
# XXX: We should use num_pos, but Python also uses num_total:[](#l1.11)
raise TypeError('%s() takes exactly 0 arguments '[](#l1.12)
'(%d given)' % (f_name, num_total))[](#l1.13)
else:[](#l1.14)
raise TypeError('%s() takes no arguments (%d given)' %[](#l1.15)
for arg in args: if isinstance(arg, str) and arg in named: if is_assigned(arg):(f_name, num_total))[](#l1.16)
--- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -632,6 +632,16 @@ class TestGetcallargsFunctions(unittest. self.assertEqualCallArgs(f, '2, c=4, **{u"b":3}') self.assertEqualCallArgs(f, 'b=2, **{u"a":3, u"c":4}')
- def test_varkw_only(self):
# issue11256:[](#l2.8)
f = self.makeCallable('**c')[](#l2.9)
self.assertEqualCallArgs(f, '')[](#l2.10)
self.assertEqualCallArgs(f, 'a=1')[](#l2.11)
self.assertEqualCallArgs(f, 'a=1, b=2')[](#l2.12)
self.assertEqualCallArgs(f, 'c=3, **{"a": 1, "b": 2}')[](#l2.13)
self.assertEqualCallArgs(f, '**UserDict(a=1, b=2)')[](#l2.14)
self.assertEqualCallArgs(f, 'c=3, **UserDict(a=1, b=2)')[](#l2.15)
+ def test_tupleargs(self): f = self.makeCallable('(b,c), (d,(e,f))=(0,[1,2])') self.assertEqualCallArgs(f, '(2,3)') @@ -693,6 +703,10 @@ class TestGetcallargsFunctions(unittest. self.assertEqualException(f, '1') self.assertEqualException(f, '[1]') self.assertEqualException(f, '(1,2,3)')
# issue11256:[](#l2.24)
f3 = self.makeCallable('**c')[](#l2.25)
self.assertEqualException(f3, '1, 2')[](#l2.26)
self.assertEqualException(f3, '1, 2, a=1, b=2')[](#l2.27)
class TestGetcallargsMethods(TestGetcallargsFunctions):
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -47,6 +47,9 @@ Core and Builtins Library ------- +- Issue #11256: Fix inspect.getcallargs on functions that take only keyword