summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_traceback.py21
-rw-r--r--Lib/traceback.py6
-rw-r--r--Misc/NEWS4
3 files changed, 30 insertions, 1 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 22c0456..26ab7dc 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -5,6 +5,9 @@ from test.test_support import run_unittest, is_jython
import traceback
+class TbError(Exception):
+ pass
+
class TracebackCases(unittest.TestCase):
# For now, a very minimal set of tests. I want to be sure that
# formatting of SyntaxErrors works based on changes for 2.1.
@@ -103,6 +106,24 @@ def test():
import sys
sys.exc_traceback.__members__
+ def raise_tberror(self):
+ raise TbError
+
+ def raise_typeerror(self):
+ raise TypeError
+
+ def test_modulename(self):
+ # Bug 860326: format_exception_only should prepend module name
+ # to exceptions not in "exceptions", like PyErr_Print does.
+ err = self.get_exception_format(self.raise_tberror, TbError)
+ self.assertEquals(len(err), 1)
+ self.assert_(err[0] == '__main__.TbError\n' or
+ err[0] == 'test.test_traceback.TbError\n')
+
+ err = self.get_exception_format(self.raise_typeerror, TypeError)
+ self.assertEquals(err[0], 'TypeError\n')
+
+
def test_main():
run_unittest(TracebackCases)
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 454eb1b..56a87dc 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -158,8 +158,12 @@ def format_exception_only(etype, value):
"""
list = []
if (type(etype) == types.ClassType
- or (isinstance(etype, type) and issubclass(etype, Exception))):
+ or (isinstance(etype, type) and issubclass(etype, BaseException))):
stype = etype.__name__
+ if not hasattr(etype, '__module__'):
+ stype = '<unknown>.' + stype
+ elif etype.__module__ != 'exceptions':
+ stype = etype.__module__ + '.' + stype
else:
stype = etype
if value is None:
diff --git a/Misc/NEWS b/Misc/NEWS
index 1e242d0..5ee249f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -49,6 +49,10 @@ Extension Modules
Library
-------
+- Patch #860326: traceback.format_exception_only() now prepends the
+ exception's module name to non-builtin exceptions, like the interpreter
+ itself does.
+
- SimpleXMLRPCServer relied on the fcntl module, which is unavailable on
Windows. Bug #1469163.