mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-125519: Improve traceback if importlib.reload()
is called with a non-module object (#125520)
This commit is contained in:
parent
9256be7ff0
commit
c5c21fee7a
3 changed files with 18 additions and 1 deletions
|
@ -103,7 +103,7 @@ def reload(module):
|
||||||
try:
|
try:
|
||||||
name = module.__name__
|
name = module.__name__
|
||||||
except AttributeError:
|
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:
|
if sys.modules.get(name) is not module:
|
||||||
raise ImportError(f"module {name} not in sys.modules", name=name)
|
raise ImportError(f"module {name} not in sys.modules", name=name)
|
||||||
|
|
|
@ -9,6 +9,7 @@ import sys
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
|
import traceback
|
||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
@ -354,6 +355,20 @@ class ReloadTests:
|
||||||
with self.assertRaises(ModuleNotFoundError):
|
with self.assertRaises(ModuleNotFoundError):
|
||||||
self.init.reload(module)
|
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,
|
(Frozen_ReloadTests,
|
||||||
Source_ReloadTests
|
Source_ReloadTests
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Improve traceback if :func:`importlib.reload` is called with an object that
|
||||||
|
is not a module. Patch by Alex Waygood.
|
Loading…
Add table
Add a link
Reference in a new issue