bpo-40108: Improve the error message in runpy when importing a module that includes the extension (GH-19239)

This commit is contained in:
Pablo Galindo 2020-03-31 12:23:55 +01:00 committed by GitHub
parent c49016e67c
commit ef67512b40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 0 deletions

View File

@ -133,6 +133,9 @@ def _get_module_details(mod_name, error=ImportError):
# importlib, where the latter raises other errors for cases where # importlib, where the latter raises other errors for cases where
# pkgutil previously raised ImportError # pkgutil previously raised ImportError
msg = "Error while finding module specification for {!r} ({}: {})" msg = "Error while finding module specification for {!r} ({}: {})"
if mod_name.endswith(".py"):
msg += (f". Try using '{mod_name[:-3]}' instead of "
f"'{mod_name}' as the module name.")
raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex
if spec is None: if spec is None:
raise error("No module named %s" % mod_name) raise error("No module named %s" % mod_name)

View File

@ -499,6 +499,16 @@ class CmdLineTest(unittest.TestCase):
self.assertNotIn(b'is a package', err) self.assertNotIn(b'is a package', err)
self.assertNotIn(b'Traceback', err) self.assertNotIn(b'Traceback', err)
def test_hint_when_triying_to_import_a_py_file(self):
with support.temp_dir() as script_dir, \
support.change_cwd(path=script_dir):
# Create invalid *.pyc as empty file
with open('asyncio.py', 'wb'):
pass
err = self.check_dash_m_failure('asyncio.py')
self.assertIn(b"Try using 'asyncio' instead "
b"of 'asyncio.py' as the module name", err)
def test_dash_m_init_traceback(self): def test_dash_m_init_traceback(self):
# These were wrapped in an ImportError and tracebacks were # These were wrapped in an ImportError and tracebacks were
# suppressed; see Issue 14285 # suppressed; see Issue 14285

View File

@ -0,0 +1,3 @@
Improve the error message when triying to import a module using :mod:`runpy`
and incorrently use the ".py" extension at the end of the module name. Patch
by Pablo Galindo.