]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40108: Improve the error message in runpy when importing a module that includes...
authorPablo Galindo <Pablogsal@gmail.com>
Tue, 31 Mar 2020 11:23:55 +0000 (12:23 +0100)
committerGitHub <noreply@github.com>
Tue, 31 Mar 2020 11:23:55 +0000 (12:23 +0100)
Lib/runpy.py
Lib/test/test_cmd_line_script.py
Misc/NEWS.d/next/Library/2020-03-31-01-11-20.bpo-40108.EGDVQ_.rst [new file with mode: 0644]

index 0f54f3e71b6fe8ba9922e6d77dab607fd08073a1..7e1e1ac5dde2dfe6b906c53f54b9854aeeed90ab 100644 (file)
@@ -133,6 +133,9 @@ def _get_module_details(mod_name, error=ImportError):
         # importlib, where the latter raises other errors for cases where
         # pkgutil previously raised ImportError
         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
     if spec is None:
         raise error("No module named %s" % mod_name)
index adfb8ce5ed245212ea368d18188d05950d378722..44a5487d75dff22ab93b1b7934e678be26d2ca96 100644 (file)
@@ -499,6 +499,16 @@ class CmdLineTest(unittest.TestCase):
             self.assertNotIn(b'is a package', 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):
         # These were wrapped in an ImportError and tracebacks were
         # suppressed; see Issue 14285
diff --git a/Misc/NEWS.d/next/Library/2020-03-31-01-11-20.bpo-40108.EGDVQ_.rst b/Misc/NEWS.d/next/Library/2020-03-31-01-11-20.bpo-40108.EGDVQ_.rst
new file mode 100644 (file)
index 0000000..778a0f1
--- /dev/null
@@ -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.