inspect: Fix getcallargs() to raise correct TypeError
... for missing keyword-only arguments. Patch by Jeremiah Lowin. Closes #20816.
This commit is contained in:
parent
374375dd26
commit
875df20e8a
|
@ -1210,7 +1210,7 @@ def getcallargs(*func_and_positional, **named):
|
|||
missing = 0
|
||||
for kwarg in kwonlyargs:
|
||||
if kwarg not in arg2value:
|
||||
if kwarg in kwonlydefaults:
|
||||
if kwonlydefaults and kwarg in kwonlydefaults:
|
||||
arg2value[kwarg] = kwonlydefaults[kwarg]
|
||||
else:
|
||||
missing += 1
|
||||
|
|
|
@ -1208,6 +1208,14 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
|||
self.assertEqualException(f3, '1, 2')
|
||||
self.assertEqualException(f3, '1, 2, a=1, b=2')
|
||||
|
||||
# issue #20816: getcallargs() fails to iterate over non-existent
|
||||
# kwonlydefaults and raises a wrong TypeError
|
||||
def f5(*, a): pass
|
||||
with self.assertRaisesRegex(TypeError,
|
||||
'missing 1 required keyword-only'):
|
||||
inspect.getcallargs(f5)
|
||||
|
||||
|
||||
class TestGetcallargsMethods(TestGetcallargsFunctions):
|
||||
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue