diff options
author | Barry Warsaw <barry@python.org> | 2012-11-20 20:35:27 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2012-11-20 20:35:27 (GMT) |
commit | b72c10996e804413ebf0cb04ffc6e10f128b90c2 (patch) | |
tree | f81b41542a8c1c891d8973d0e65980f8afec5afb /Lib | |
parent | 47037d7e4e1f0f71a7640f1e71f8d558c3ac6668 (diff) | |
parent | 82c1c781c7ee6496bd4c404b7ba972eed5dbcb12 (diff) | |
download | cpython-b72c10996e804413ebf0cb04ffc6e10f128b90c2.zip cpython-b72c10996e804413ebf0cb04ffc6e10f128b90c2.tar.gz cpython-b72c10996e804413ebf0cb04ffc6e10f128b90c2.tar.bz2 |
- Issue #16514: Fix regression causing a traceback when sys.path[0] is None
(actually, any non-string or non-bytes type).
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 2 | ||||
-rw-r--r-- | Lib/test/test_importlib/import_/test_path.py | 25 |
2 files changed, 23 insertions, 4 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index a924c79..2e0bd6a 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -1287,6 +1287,8 @@ class PathFinder: # the list of paths that will become its __path__ namespace_path = [] for entry in path: + if not isinstance(entry, (str, bytes)): + continue finder = cls._path_importer_cache(entry) if finder is not None: if hasattr(finder, 'find_loader'): diff --git a/Lib/test/test_importlib/import_/test_path.py b/Lib/test/test_importlib/import_/test_path.py index 0c086ce..8b9c77d 100644 --- a/Lib/test/test_importlib/import_/test_path.py +++ b/Lib/test/test_importlib/import_/test_path.py @@ -1,15 +1,14 @@ from importlib import _bootstrap from importlib import machinery +from importlib import import_module from .. import util from . import util as import_util -import imp import os import sys -import tempfile -from test import support -from types import MethodType +from types import ModuleType import unittest import warnings +import zipimport class FinderTests(unittest.TestCase): @@ -89,6 +88,24 @@ class FinderTests(unittest.TestCase): self.assertIs(loader, importer) self.assertIn(os.curdir, sys.path_importer_cache) + def test_None_on_sys_path(self): + # Putting None in sys.path[0] caused an import regression from Python + # 3.2: http://bugs.python.org/issue16514 + new_path = sys.path[:] + new_path.insert(0, None) + new_path_importer_cache = sys.path_importer_cache.copy() + new_path_importer_cache.pop(None, None) + new_path_hooks = [zipimport.zipimporter, + _bootstrap.FileFinder.path_hook( + *_bootstrap._get_supported_file_loaders())] + with util.uncache('email'): + with util.import_state(meta_path=sys.meta_path[:], + path=new_path, + path_importer_cache=new_path_importer_cache, + path_hooks=new_path_hooks): + module = import_module('email') + self.assertIsInstance(module, ModuleType) + def test_main(): from test.support import run_unittest |