#7539: use _saferepr() for printing exceptions from pdb.
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 0751c17..79a36a6 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -237,7 +237,7 @@
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 @@
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):
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index ce64d17..0ef525e 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -126,6 +126,33 @@
"""
+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)