Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1df78c8

Browse files
committed
merge 3.2
2 parents fe55783 + 6a2638b commit 1df78c8

3 files changed

Lines changed: 44 additions & 2 deletions

File tree

Lib/inspect.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,8 +944,14 @@ def getcallargs(func, *positional, **named):
944944
f_name, 'at most' if defaults else 'exactly', num_args,
945945
'arguments' if num_args > 1 else 'argument', num_total))
946946
elif num_args == 0 and num_total:
947-
raise TypeError('%s() takes no arguments (%d given)' %
948-
(f_name, num_total))
947+
if varkw or kwonlyargs:
948+
if num_pos:
949+
# XXX: We should use num_pos, but Python also uses num_total:
950+
raise TypeError('%s() takes exactly 0 positional arguments '
951+
'(%d given)' % (f_name, num_total))
952+
else:
953+
raise TypeError('%s() takes no arguments (%d given)' %
954+
(f_name, num_total))
949955

950956
for arg in itertools.chain(args, kwonlyargs):
951957
if arg in named:

Lib/test/test_inspect.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,16 @@ def test_varkw(self):
632632
self.assertEqualCallArgs(f, '2, c=4, **collections.UserDict(b=3)')
633633
self.assertEqualCallArgs(f, 'b=2, **collections.UserDict(a=3, c=4)')
634634

635+
def test_varkw_only(self):
636+
# issue11256:
637+
f = self.makeCallable('**c')
638+
self.assertEqualCallArgs(f, '')
639+
self.assertEqualCallArgs(f, 'a=1')
640+
self.assertEqualCallArgs(f, 'a=1, b=2')
641+
self.assertEqualCallArgs(f, 'c=3, **{"a": 1, "b": 2}')
642+
self.assertEqualCallArgs(f, '**collections.UserDict(a=1, b=2)')
643+
self.assertEqualCallArgs(f, 'c=3, **collections.UserDict(a=1, b=2)')
644+
635645
def test_keyword_only(self):
636646
f = self.makeCallable('a=3, *, c, d=2')
637647
self.assertEqualCallArgs(f, 'c=3')
@@ -643,6 +653,11 @@ def test_keyword_only(self):
643653
self.assertEqualException(f, 'a=3')
644654
self.assertEqualException(f, 'd=4')
645655

656+
f = self.makeCallable('*, c, d=2')
657+
self.assertEqualCallArgs(f, 'c=3')
658+
self.assertEqualCallArgs(f, 'c=3, d=4')
659+
self.assertEqualCallArgs(f, 'd=4, c=3')
660+
646661
def test_multiple_features(self):
647662
f = self.makeCallable('a, b=2, *f, **g')
648663
self.assertEqualCallArgs(f, '2, 3, 7')
@@ -656,6 +671,17 @@ def test_multiple_features(self):
656671
'(4,[5,6])]), **collections.UserDict('
657672
'y=9, z=10)')
658673

674+
f = self.makeCallable('a, b=2, *f, x, y=99, **g')
675+
self.assertEqualCallArgs(f, '2, 3, x=8')
676+
self.assertEqualCallArgs(f, '2, 3, x=8, *[(4,[5,6]), 7]')
677+
self.assertEqualCallArgs(f, '2, x=8, *[3, (4,[5,6]), 7], y=9, z=10')
678+
self.assertEqualCallArgs(f, 'x=8, *[2, 3, (4,[5,6])], y=9, z=10')
679+
self.assertEqualCallArgs(f, 'x=8, *collections.UserList('
680+
'[2, 3, (4,[5,6])]), q=0, **{"y":9, "z":10}')
681+
self.assertEqualCallArgs(f, '2, x=8, *collections.UserList([3, '
682+
'(4,[5,6])]), q=0, **collections.UserDict('
683+
'y=9, z=10)')
684+
659685
def test_errors(self):
660686
f0 = self.makeCallable('')
661687
f1 = self.makeCallable('a, b')
@@ -692,6 +718,13 @@ def test_errors(self):
692718
# - for functions and bound methods: unexpected keyword 'c'
693719
# - for unbound methods: multiple values for keyword 'a'
694720
#self.assertEqualException(f, '1, c=3, a=2')
721+
# issue11256:
722+
f3 = self.makeCallable('**c')
723+
self.assertEqualException(f3, '1, 2')
724+
self.assertEqualException(f3, '1, 2, a=1, b=2')
725+
f4 = self.makeCallable('*, a, b=0')
726+
self.assertEqualException(f3, '1, 2')
727+
self.assertEqualException(f3, '1, 2, a=1, b=2')
695728

696729
class TestGetcallargsMethods(TestGetcallargsFunctions):
697730

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ Core and Builtins
8787
Library
8888
-------
8989

90+
- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
91+
arguments.
92+
9093
- Issue #11696: Fix ID generation in msilib.
9194

9295
- itertools.accumulate now supports an optional *func* argument for

0 commit comments

Comments
 (0)