#7539: use _saferepr() for printing exceptions from pdb.

This commit is contained in:
Georg Brandl 2010-07-30 09:18:49 +00:00
parent c9a5ed04c1
commit f833a56fd2
2 changed files with 29 additions and 2 deletions

View File

@ -237,7 +237,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
if type(t) == type(''):
exc_type_name = t
else: exc_type_name = t.__name__
print >>self.stdout, '***', exc_type_name + ':', v
print >>self.stdout, '***', exc_type_name + ':', _saferepr(v)
def precmd(self, line):
"""Handle alias expansion and ';;' separator."""
@ -753,7 +753,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
if isinstance(t, str):
exc_type_name = t
else: exc_type_name = t.__name__
print >>self.stdout, '***', exc_type_name + ':', repr(v)
print >>self.stdout, '***', exc_type_name + ':', _saferepr(v)
raise
def do_p(self, arg):

View File

@ -126,6 +126,33 @@ def test_pdb_skip_modules_with_callback():
"""
def test_pdb_unicode_exception():
r"""This tests exceptions that cannot be displayed due to Unicode issues.
http://bugs.python.org/issue7539
>>> def test_function():
... import pdb; pdb.Pdb().set_trace()
... pass
>>> def raising_function():
... raise ValueError(u"\xff")
>>> with PdbTestInput([
... 'raising_function()',
... 'p raising_function()',
... 'continue',
... ]):
... test_function()
> <doctest test.test_pdb.test_pdb_unicode_exception[0]>(3)test_function()
-> pass
(Pdb) raising_function()
*** ValueError: ValueError(u'\xff',)
(Pdb) p raising_function()
*** ValueError: ValueError(u'\xff',)
(Pdb) continue
"""
def test_main():
from test import test_pdb
test_support.run_doctest(test_pdb, verbosity=True)