Issue #28026: Raise ImportError when exec_module() exists but create_module() is missing.
This commit is contained in:
parent
e58571b7ea
commit
f3fd06a2e4
|
@ -559,9 +559,8 @@ def module_from_spec(spec):
|
|||
# module creation should be used.
|
||||
module = spec.loader.create_module(spec)
|
||||
elif hasattr(spec.loader, 'exec_module'):
|
||||
_warnings.warn('starting in Python 3.6, loaders defining exec_module() '
|
||||
'must also define create_module()',
|
||||
DeprecationWarning, stacklevel=2)
|
||||
raise ImportError('loaders that define exec_module() '
|
||||
'must also define create_module()')
|
||||
if module is None:
|
||||
module = _new_module(spec.name)
|
||||
_init_module_attrs(spec, module)
|
||||
|
|
|
@ -47,14 +47,8 @@ class ModuleFromSpecTests:
|
|||
def exec_module(self, module):
|
||||
pass
|
||||
spec = self.machinery.ModuleSpec('test', Loader())
|
||||
with warnings.catch_warnings(record=True) as w:
|
||||
warnings.simplefilter('always')
|
||||
with self.assertRaises(ImportError):
|
||||
module = self.util.module_from_spec(spec)
|
||||
self.assertEqual(1, len(w))
|
||||
self.assertTrue(issubclass(w[0].category, DeprecationWarning))
|
||||
self.assertIn('create_module', str(w[0].message))
|
||||
self.assertIsInstance(module, types.ModuleType)
|
||||
self.assertEqual(module.__name__, spec.name)
|
||||
|
||||
def test_create_module_returns_None(self):
|
||||
class Loader(self.abc.Loader):
|
||||
|
|
|
@ -6968,6 +6968,9 @@ Core and Builtins
|
|||
|
||||
- Issue #19369: Optimized the usage of __length_hint__().
|
||||
|
||||
- Issue #28026: Raise ImportError when exec_module() exists but
|
||||
create_module() is missing.
|
||||
|
||||
- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
|
||||
Python executable and not removed by the linker's optimizer.
|
||||
|
||||
|
|
1796
Python/importlib.h
1796
Python/importlib.h
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue