diff options
-rw-r--r-- | Lib/importlib/_bootstrap.py | 2 | ||||
-rw-r--r-- | Lib/importlib/test/import_/test_api.py | 22 | ||||
-rw-r--r-- | Lib/importlib/test/regrtest.py | 1 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
4 files changed, 28 insertions, 1 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 95fea33..063f603 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -917,6 +917,8 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0): import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). """ + if not hasattr(name, 'rpartition'): + raise TypeError("module name must be str, not {}".format(type(name))) if level == 0: module = _gcd_import(name) else: diff --git a/Lib/importlib/test/import_/test_api.py b/Lib/importlib/test/import_/test_api.py new file mode 100644 index 0000000..9075d42 --- /dev/null +++ b/Lib/importlib/test/import_/test_api.py @@ -0,0 +1,22 @@ +from . import util +import unittest + + +class APITest(unittest.TestCase): + + """Test API-specific details for __import__ (e.g. raising the right + exception when passing in an int for the module name).""" + + def test_name_requires_rparition(self): + # Raise TypeError if a non-string is passed in for the module name. + with self.assertRaises(TypeError): + util.import_(42) + + +def test_main(): + from test.support import run_unittest + run_unittest(APITest) + + +if __name__ == '__main__': + test_main() diff --git a/Lib/importlib/test/regrtest.py b/Lib/importlib/test/regrtest.py index 17e7f4e..aedc338 100644 --- a/Lib/importlib/test/regrtest.py +++ b/Lib/importlib/test/regrtest.py @@ -6,7 +6,6 @@ Otherwise all command-line options valid for test.regrtest are also valid for this script. XXX FAILING - test_builtin # Wanting a TypeError for an integer name test_import # execution bit, exception name differing, file name differing between code and module (?) test_importhooks # package not set in _gcd_import() but level > 0 @@ -68,6 +68,10 @@ C-API Library ------- +- Raise a TypeError when the name of a module to be imported for + importlib.__import__ is not a string (was raising an + AttributeError before). + - Allow the fromlist passed into importlib.__import__ to be any iterable. - Have importlib raise ImportError if None is found in sys.modules. |