Remaining fallout from 17911

The code module was using a private function from traceback in order to skip a
frame - used the direct interface to do that instead,

The decimal module suffered minor fallout from formatting changes ('None' as a
value is now not printed by traceback, the same as None was not before).

The cgitb module was passing a bogus exception type (type.__name__) into
format_exception, which uncovered that format_exception and print_exception had
been ignoring the etype for some time, so the compatibility thunk to the new
code now does the same thing.
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 22544ac..72e1e2a 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -89,10 +89,13 @@
     occurred with a caret on the next line indicating the approximate
     position of the error.
     """
+    # format_exception has ignored etype for some time, and code such as cgitb
+    # passes in bogus values as a result. For compatibility with such code we
+    # ignore it here (rather than in the new TracebackException API).
     if file is None:
         file = sys.stderr
     for line in TracebackException(
-            etype, value, tb, limit=limit).format(chain=chain):
+            type(value), value, tb, limit=limit).format(chain=chain):
         print(line, file=file, end="")
 
 
@@ -105,8 +108,11 @@
     these lines are concatenated and printed, exactly the same text is
     printed as does print_exception().
     """
+    # format_exception has ignored etype for some time, and code such as cgitb
+    # passes in bogus values as a result. For compatibility with such code we
+    # ignore it here (rather than in the new TracebackException API).
     return list(TracebackException(
-        etype, value, tb, limit=limit).format(chain=chain))
+        type(value), value, tb, limit=limit).format(chain=chain))
 
 
 def format_exception_only(etype, value):