]> granicus.if.org Git - python/commitdiff
inspect: Fix getcallargs() to raise correct TypeError
authorYury Selivanov <yselivanov@sprymix.com>
Thu, 27 Mar 2014 22:23:03 +0000 (18:23 -0400)
committerYury Selivanov <yselivanov@sprymix.com>
Thu, 27 Mar 2014 22:23:03 +0000 (18:23 -0400)
... for missing keyword-only arguments. Patch by Jeremiah Lowin.
Closes #20816.

Lib/inspect.py
Lib/test/test_inspect.py
Misc/NEWS

index c7a2cf8833f00bf4f5642d6e6224aa71502333e5..06057afaf2d8efd98236c5aebd96a7e0d937005c 100644 (file)
@@ -1208,7 +1208,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
index 5c6ae394d52083d6fc57adaac46e8b9a8b4cef4f..20f7217d440348bbddd98bbd3ce415ac977873f3 100644 (file)
@@ -1206,6 +1206,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):
index 8f55c63508682b507095045e90dfb282a0876cdb..c51ad17c5c29cfb944a9da6efc9d34171281190a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -83,6 +83,9 @@ Library
 - Issue #19748: On AIX, time.mktime() now raises an OverflowError for year
   outsize range [1902; 2037].
 
+- Issue #20816: Fix inspect.getcallargs() to raise correct TypeError for
+  missing keyword-only arguments. Patch by Jeremiah Lowin.
+
 Documentation
 -------------