Skip to content

Commit c5c21fe

Browse files
authored
gh-125519: Improve traceback if importlib.reload() is called with a non-module object (#125520)
1 parent 9256be7 commit c5c21fe

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

Lib/importlib/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def reload(module):
103103
try:
104104
name = module.__name__
105105
except AttributeError:
106-
raise TypeError("reload() argument must be a module")
106+
raise TypeError("reload() argument must be a module") from None
107107

108108
if sys.modules.get(name) is not module:
109109
raise ImportError(f"module {name} not in sys.modules", name=name)

Lib/test/test_importlib/test_api.py

+15
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from test import support
1010
from test.support import import_helper
1111
from test.support import os_helper
12+
import traceback
1213
import types
1314
import unittest
1415

@@ -354,6 +355,20 @@ def test_module_missing_spec(self):
354355
with self.assertRaises(ModuleNotFoundError):
355356
self.init.reload(module)
356357

358+
def test_reload_traceback_with_non_str(self):
359+
# gh-125519
360+
with support.captured_stdout() as stdout:
361+
try:
362+
self.init.reload("typing")
363+
except TypeError as exc:
364+
traceback.print_exception(exc, file=stdout)
365+
else:
366+
self.fail("Expected TypeError to be raised")
367+
printed_traceback = stdout.getvalue()
368+
self.assertIn("TypeError", printed_traceback)
369+
self.assertNotIn("AttributeError", printed_traceback)
370+
self.assertNotIn("module.__spec__.name", printed_traceback)
371+
357372

358373
(Frozen_ReloadTests,
359374
Source_ReloadTests
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Improve traceback if :func:`importlib.reload` is called with an object that
2+
is not a module. Patch by Alex Waygood.

0 commit comments

Comments
 (0)