diff -r cf70f030a744 Lib/inspect.py --- a/Lib/inspect.py Wed Jun 18 23:07:46 2014 -0400 +++ b/Lib/inspect.py Mon Jun 23 21:47:06 2014 +0300 @@ -969,8 +969,13 @@ assign(varkw, named) elif named: unexpected = next(iter(named)) - if isinstance(unexpected, unicode): - unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') + try: + unicode + except NameError: + pass + else: + if isinstance(unexpected, unicode): + unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace') raise TypeError("%s() got an unexpected keyword argument '%s'" % (f_name, unexpected)) unassigned = num_args - len([arg for arg in args if is_assigned(arg)]) diff -r cf70f030a744 Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Wed Jun 18 23:07:46 2014 -0400 +++ b/Lib/test/test_inspect.py Mon Jun 23 21:47:06 2014 +0300 @@ -8,7 +8,7 @@ from UserList import UserList from UserDict import UserDict -from test.test_support import run_unittest, check_py3k_warnings +from test.test_support import run_unittest, check_py3k_warnings, have_unicode with check_py3k_warnings( ("tuple parameter unpacking has been removed", SyntaxWarning), @@ -17,7 +17,10 @@ from test import inspect_fodder2 as mod2 # C module for test_findsource_binary -import unicodedata +try: + import unicodedata +except ImportError: + unicodedata = None # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, @@ -798,7 +801,8 @@ self.assertEqualException(f, '2, c=3') self.assertEqualException(f, '2, 3, c=4') self.assertEqualException(f, '2, c=4, b=3') - self.assertEqualException(f, '**{u"\u03c0\u03b9": 4}') + if have_unicode: + self.assertEqualException(f, '**{u"\u03c0\u03b9": 4}') # f got multiple values for keyword argument self.assertEqualException(f, '1, a=2') self.assertEqualException(f, '1, **{"a":2}')