Handle filenames that can't be decoded to unicode.

Another Python2 specific case to handle.
This commit is contained in:
Robert Collins 2015-03-09 14:03:57 +13:00
parent 652c95d267
commit 9df5538af8
2 changed files with 12 additions and 2 deletions

View File

@ -380,7 +380,7 @@ class StackSummary(list):
for frame in self:
row = []
row.append(u(' File "{0}", line {1}, in {2}\n').format(
frame.filename, frame.lineno, frame.name))
_some_str(frame.filename), frame.lineno, frame.name))
if frame.line:
row.append(u(' {0}\n').format(frame.line.strip()))
if frame.locals:

View File

@ -605,6 +605,16 @@ class TestStack(unittest.TestCase):
[' File "foo.py", line 1, in fred\n line\n'],
s.format())
def test_format_bad_filename(self):
# Filenames in Python2 may be bytestrings that will fail to implicit
# decode.
# This won't decode via the implicit(ascii) codec.
fname = u('\u5341').encode('shift-jis')
s = traceback.StackSummary.from_list([(fname, 1, 'fred', 'line')])
self.assertEqual(
[' File "b\'\\x8f\\\\\'", line 1, in fred\n line\n'],
s.format())
def test_locals(self):
linecache.updatecache('/foo.py', globals())
c = test_code('/foo.py', 'method')
@ -627,7 +637,7 @@ class TestStack(unittest.TestCase):
traceback.walk_stack(None), capture_locals=True, limit=1)
s = some_inner(3, 4)
self.assertEqual(
[' File "' + FNAME + '", line 627, '
[' File "' + FNAME + '", line 637, '
'in some_inner\n'
' traceback.walk_stack(None), capture_locals=True, limit=1)\n'
' a = 1\n'