diff -r 5e05d7d3db9c Lib/inspect.py --- a/Lib/inspect.py Sat Mar 01 07:53:28 2014 -0500 +++ b/Lib/inspect.py Sat Mar 01 11:03:16 2014 -0500 @@ -1208,7 +1208,7 @@ 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 -r 5e05d7d3db9c Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Sat Mar 01 07:53:28 2014 -0500 +++ b/Lib/test/test_inspect.py Sat Mar 01 11:03:16 2014 -0500 @@ -1206,6 +1206,19 @@ self.assertEqualException(f3, '1, 2') self.assertEqualException(f3, '1, 2, a=1, b=2') + # bug in 3.4rc1 tries to iterate over non-existant kwonlydefaults + # and raises a TypeError about iteration when it should raise a + # TypeError about missing arguments + def f5(*, a): pass + try: + inspect.getcallargs(f5) + except TypeError as err: + self.assertTrue('missing 1 required keyword-only' in str(err)) + except: + raise + + + class TestGetcallargsMethods(TestGetcallargsFunctions): def setUp(self):