Patch #860326: traceback.format_exception_only() now prepends the
exception's module name to non-builtin exceptions, like the interpreter
itself does.
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 @@
 
 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 @@
             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 @@
     """
     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: