summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2012-11-20 20:35:27 (GMT)
committerBarry Warsaw <barry@python.org>2012-11-20 20:35:27 (GMT)
commitb72c10996e804413ebf0cb04ffc6e10f128b90c2 (patch)
treef81b41542a8c1c891d8973d0e65980f8afec5afb /Lib
parent47037d7e4e1f0f71a7640f1e71f8d558c3ac6668 (diff)
parent82c1c781c7ee6496bd4c404b7ba972eed5dbcb12 (diff)
downloadcpython-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.py2
-rw-r--r--Lib/test/test_importlib/import_/test_path.py25
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