]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-125519: Improve traceback if `importlib.reload()` is called with a non...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 21 Oct 2024 08:20:42 +0000 (10:20 +0200)
committerGitHub <noreply@github.com>
Mon, 21 Oct 2024 08:20:42 +0000 (08:20 +0000)
gh-125519: Improve traceback if `importlib.reload()` is called with a non-module object (GH-125520)
(cherry picked from commit c5c21fee7ae1ea689a351caa454c98e716a6e537)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Lib/importlib/__init__.py
Lib/test/test_importlib/test_api.py
Misc/NEWS.d/next/Library/2024-10-15-14-01-03.gh-issue-125519.TqGh6a.rst [new file with mode: 0644]

index 707c081cb2c5b6def4f8d4ac121f46eec05f77d9..5b92442fc379e0e60be3a5fac3306bd24f60c878 100644 (file)
@@ -105,7 +105,7 @@ def reload(module):
         try:
             name = module.__name__
         except AttributeError:
-            raise TypeError("reload() argument must be a module")
+            raise TypeError("reload() argument must be a module") from None
 
     if sys.modules.get(name) is not module:
         raise ImportError(f"module {name} not in sys.modules", name=name)
index ecf2c47c462e23ff74c16e70c95870c73f190acf..ef01a3f6de09bf10b86b91950a01841d73550b00 100644 (file)
@@ -8,6 +8,8 @@ import os.path
 import sys
 from test.support import import_helper
 from test.support import os_helper
+from test import support
+import traceback
 import types
 import unittest
 import warnings
@@ -354,6 +356,20 @@ class ReloadTests:
             with self.assertRaises(ModuleNotFoundError):
                 self.init.reload(module)
 
+    def test_reload_traceback_with_non_str(self):
+        # gh-125519
+        with support.captured_stdout() as stdout:
+            try:
+                self.init.reload("typing")
+            except TypeError as exc:
+                traceback.print_exception(exc, file=stdout)
+            else:
+                self.fail("Expected TypeError to be raised")
+        printed_traceback = stdout.getvalue()
+        self.assertIn("TypeError", printed_traceback)
+        self.assertNotIn("AttributeError", printed_traceback)
+        self.assertNotIn("module.__spec__.name", printed_traceback)
+
 
 (Frozen_ReloadTests,
  Source_ReloadTests
diff --git a/Misc/NEWS.d/next/Library/2024-10-15-14-01-03.gh-issue-125519.TqGh6a.rst b/Misc/NEWS.d/next/Library/2024-10-15-14-01-03.gh-issue-125519.TqGh6a.rst
new file mode 100644 (file)
index 0000000..e606262
--- /dev/null
@@ -0,0 +1,2 @@
+Improve traceback if :func:`importlib.reload` is called with an object that
+is not a module. Patch by Alex Waygood.