Index: Python/ceval.c =================================================================== --- Python/ceval.c (revision 68678) +++ Python/ceval.c (working copy) @@ -2932,7 +2932,8 @@ PyObject *keyword = kws[2*i]; PyObject *value = kws[2*i + 1]; int j; - if (keyword == NULL || !PyString_Check(keyword)) { + if (keyword == NULL || !(PyString_Check(keyword) || + PyUnicode_Check(keyword))) { PyErr_Format(PyExc_TypeError, "%.200s() keywords must be strings", PyString_AsString(co->co_name)); Index: Lib/test/test_extcall.py =================================================================== --- Lib/test/test_extcall.py (revision 68678) +++ Lib/test/test_extcall.py (working copy) @@ -51,6 +51,8 @@ (1, 2, 3, 4, 5) {'a': 6, 'b': 7} >>> f(1, 2, 3, x=4, y=5, *(6, 7), **UserDict(a=8, b=9)) (1, 2, 3, 6, 7) {'a': 8, 'b': 9, 'x': 4, 'y': 5} + >>> f(**{u'a' : 4}) + () {u'a': 4} Examples with invalid arguments (TypeErrors). We're also testing the function names in the exception messages.