bpo-45614: Fix traceback display for exceptions with invalid module name (GH-29726) (GH-29826)

(cherry picked from commit 4dfae6f38e1720ddafcdd68043e476ecb41cb4d5)
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 901b994..d6a010f 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -604,6 +604,8 @@ def format_exception_only(self):
         stype = self.exc_type.__qualname__
         smod = self.exc_type.__module__
         if smod not in ("__main__", "builtins"):
+            if not isinstance(smod, str):
+                smod = "<unknown>"
             stype = smod + '.' + stype
 
         if not issubclass(self.exc_type, SyntaxError):