summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2014-03-27 22:23:03 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2014-03-27 22:23:03 (GMT)
commit875df20e8a2a9bad07a42f0175be019d915e0845 (patch)
treee1e6b9db6c30cf52d99e36b4f6becaba4ff37315
parent374375dd26118ccb7027f66d66ab9e80c82f4103 (diff)
downloadcpython-875df20e8a2a9bad07a42f0175be019d915e0845.zip
cpython-875df20e8a2a9bad07a42f0175be019d915e0845.tar.gz
cpython-875df20e8a2a9bad07a42f0175be019d915e0845.tar.bz2
inspect: Fix getcallargs() to raise correct TypeError
... for missing keyword-only arguments. Patch by Jeremiah Lowin. Closes #20816.
-rw-r--r--Lib/inspect.py2
-rw-r--r--Lib/test/test_inspect.py8
-rw-r--r--Misc/NEWS3
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 05d67fc..fdb5e2a 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -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
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 95b8877..b943530 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -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):
diff --git a/Misc/NEWS b/Misc/NEWS
index c8384f9..fa774ba 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -113,6 +113,9 @@ Library
- Issue #20378: Improve repr of inspect.Signature and inspect.Parameter.
+- Issue #20816: Fix inspect.getcallargs() to raise correct TypeError for
+ missing keyword-only arguments. Patch by Jeremiah Lowin.
+
Documentation
-------------