Commit dda58434 authored by Martin Panter's avatar Martin Panter

Issue #19771: Omit irrelevant message if package could not be initialized

parent f0c0318c
...@@ -132,6 +132,8 @@ def _get_module_details(mod_name, error=ImportError): ...@@ -132,6 +132,8 @@ def _get_module_details(mod_name, error=ImportError):
pkg_main_name = mod_name + ".__main__" pkg_main_name = mod_name + ".__main__"
return _get_module_details(pkg_main_name, error) return _get_module_details(pkg_main_name, error)
except error as e: except error as e:
if mod_name not in sys.modules:
raise # No module loaded; being a package is irrelevant
raise error(("%s; %r is a package and cannot " + raise error(("%s; %r is a package and cannot " +
"be directly executed") %(e, mod_name)) "be directly executed") %(e, mod_name))
loader = spec.loader loader = spec.loader
......
...@@ -442,6 +442,19 @@ class CmdLineTest(unittest.TestCase): ...@@ -442,6 +442,19 @@ class CmdLineTest(unittest.TestCase):
self.assertRegex(err, regex) self.assertRegex(err, regex)
self.assertNotIn(b'Traceback', err) self.assertNotIn(b'Traceback', err)
def test_dash_m_bad_pyc(self):
with support.temp_dir() as script_dir, \
support.change_cwd(path=script_dir):
os.mkdir('test_pkg')
# Create invalid *.pyc as empty file
with open('test_pkg/__init__.pyc', 'wb'):
pass
err = self.check_dash_m_failure('test_pkg')
self.assertRegex(err, br'Error while finding spec.*'
br'ImportError.*bad magic number')
self.assertNotIn(b'is a package', err)
self.assertNotIn(b'Traceback', 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
......
...@@ -41,6 +41,10 @@ Library ...@@ -41,6 +41,10 @@ Library
"runpy" module now lets exceptions from package initialization pass back to "runpy" module now lets exceptions from package initialization pass back to
the caller, rather than raising ImportError. the caller, rather than raising ImportError.
- Issue #19771: Also in runpy and the "-m" option, omit the irrelevant
message ". . . is a package and cannot be directly executed" if the package
could not even be initialized (e.g. due to a bad *.pyc file).
- Issue #25177: Fixed problem with the mean of very small and very large - Issue #25177: Fixed problem with the mean of very small and very large
numbers. As a side effect, statistics.mean and statistics.variance should numbers. As a side effect, statistics.mean and statistics.variance should
be significantly faster. be significantly faster.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment