Inspired by SF patch #860326, make the exception formatting by
traceback.py be closer to the built-in formatting.
A few unittests had to be fixed, too.
diff --git a/Lib/decimal.py b/Lib/decimal.py
index a8fde82..99c0de6 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -85,7 +85,7 @@
   ...
   ...
   ...
-DivisionByZero: x / 0
+decimal.DivisionByZero: x / 0
 >>> c = Context()
 >>> c.traps[InvalidOperation] = 0
 >>> print c.flags[InvalidOperation]
@@ -103,7 +103,7 @@
   ...
   ...
   ...
-InvalidOperation: 0 / 0
+decimal.InvalidOperation: 0 / 0
 >>> print c.flags[InvalidOperation]
 1
 >>> c.flags[InvalidOperation] = 0
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 2774ec1..7160907 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1581,7 +1581,7 @@
 
     - test: the DocTest object being run
 
-    - excample: the Example object that failed
+    - example: the Example object that failed
 
     - exc_info: the exception info
     """
@@ -1664,7 +1664,7 @@
          >>> runner.run(test)
          Traceback (most recent call last):
          ...
-         UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
+         doctest.UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
 
          >>> del test.globs['__builtins__']
          >>> test.globs
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 12d75dd..1390e15 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -2234,7 +2234,7 @@
     >>> doctest.testfile('test_doctest.txt', raise_on_error=True)
     ... # doctest: +ELLIPSIS
     Traceback (most recent call last):
-    UnexpectedException: ...
+    doctest.UnexpectedException: ...
     >>> doctest.master = None  # Reset master.
 
 If the tests contain non-ASCII characters, the tests might fail, since
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 6f9e464..9ba1dca 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -118,7 +118,9 @@
         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')
+        self.assertEqual(err[0], "%s.%s: %s\n" % (X.__module__,
+                                                  X.__name__,
+                                                  str_value))
 
 
 def test_main():
diff --git a/Lib/test/test_unpack.py b/Lib/test/test_unpack.py
index 3f72648..cd48689 100644
--- a/Lib/test/test_unpack.py
+++ b/Lib/test/test_unpack.py
@@ -107,7 +107,7 @@
     >>> a, b, c, d, e = BadSeq()
     Traceback (most recent call last):
       ...
-    BozoError
+    test.test_unpack.BozoError
 
 Trigger code while expecting an IndexError (unpack sequence too short, wrong
 error)
@@ -115,7 +115,7 @@
     >>> a, b, c = BadSeq()
     Traceback (most recent call last):
       ...
-    BozoError
+    test.test_unpack.BozoError
 
 """
 
diff --git a/Lib/traceback.py b/Lib/traceback.py
index efd0f75..eb2fdf6 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -163,6 +163,9 @@
     """
 
     stype = etype.__name__
+    smod = etype.__module__
+    if smod not in ("exceptions", "__main__", "__builtin__"):
+        stype = smod + '.' + stype
 
     if not issubclass(etype, SyntaxError):
         return [_format_final_exc_line(stype, value)]