]> granicus.if.org Git - python/commitdiff
Bug #1531405, format_exception no longer raises an exception if
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 4 Aug 2006 04:50:21 +0000 (04:50 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 4 Aug 2006 04:50:21 +0000 (04:50 +0000)
str(exception) raised an exception.

Lib/test/test_traceback.py
Lib/traceback.py
Misc/NEWS

index 7f0ede5b3a0b79c52b390e355fd1e0ac0f3ed425..b3c5a509580cc874a686a136e4c92c0b73f8821d 100644 (file)
@@ -130,15 +130,24 @@ def test():
     def test_string_exception1(self):
         str_type = "String Exception"
         err = traceback.format_exception_only(str_type, None)
-        self.assert_(len(err) == 1)
-        self.assert_(err[0] == str_type + '\n')
+        self.assertEqual(len(err), 1)
+        self.assertEqual(err[0], str_type + '\n')
 
     def test_string_exception2(self):
         str_type = "String Exception"
         str_value = "String Value"
         err = traceback.format_exception_only(str_type, str_value)
-        self.assert_(len(err) == 1)
-        self.assert_(err[0] == str_type + ': ' + str_value + '\n')
+        self.assertEqual(len(err), 1)
+        self.assertEqual(err[0], str_type + ': ' + str_value + '\n')
+
+    def test_format_exception_only_bad__str__(self):
+        class X(Exception):
+            def __str__(self):
+                1/0
+        err = traceback.format_exception_only(X, X())
+        self.assertEqual(len(err), 1)
+        str_value = '<unprintable %s object>' % X.__name__
+        self.assertEqual(err[0], X.__name__ + ': ' + str_value + '\n')
 
 
 def test_main():
index a0b57596ef59e6564c6fc7338c5b7377dcb060c5..505a3052ccfe8effa4a982805d5918356ee4d696 100644 (file)
@@ -202,7 +202,12 @@ def format_exception_only(etype, value):
 
 def _format_final_exc_line(etype, value):
     """Return a list of a single line -- normal case for format_exception_only"""
-    if value is None or not str(value):
+    try:
+        printable = value is None or not str(value)
+    except:
+        printable = False
+
+    if printable:
         line = "%s\n" % etype
     else:
         line = "%s: %s\n" % (etype, _some_str(value))
index 1923b4f91574fcd0eae18fb9c26c624990bc9de3..7a1d7bf4ee91a0b76f9a8656ca509dacc612e09a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -4,6 +4,38 @@ Python News
 
 (editors: check NEWS.help for information about editing NEWS using ReST.)
 
+What's New in Python 2.5 release candidate 1?
+=============================================
+
+*Release date: XX-AUG-2006*
+
+Core and builtins
+-----------------
+
+
+Library
+-------
+
+- Bug #1531405, format_exception no longer raises an exception if
+  str(exception) raised an exception.
+
+
+Extension Modules
+-----------------
+
+
+Tests
+-----
+
+
+Build
+-----
+
+
+Mac
+---
+
+
 What's New in Python 2.5 beta 3?
 ================================