summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/os.py18
-rw-r--r--Lib/test/test_os.py5
2 files changed, 20 insertions, 3 deletions
diff --git a/Lib/os.py b/Lib/os.py
index 5c80e67..cdc2a66 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -382,18 +382,32 @@ def get_exec_path(env=None):
*env* must be an environment variable dict or None. If *env* is None,
os.environ will be used.
"""
+ # Use a local import instead of a global import to avoid bootstrap issue:
+ # the os module is used to build Python extensions.
+ import warnings
+
if env is None:
env = environ
try:
- path_list = env.get('PATH')
+ # ignore BytesWarning warning
+ with warnings.catch_warnings(record=True):
+ path_list = env.get('PATH')
except (TypeError, BytesWarning):
+ # A BytesWarning here means that env has a b'PATH' key, but no 'PATH'
+ # key. Compare bytes and str raises a BytesWarning exception only if
+ # sys.flags.bytes_warning==2, and in this case it is not possible to
+ # create a dictionary with both keys.
path_list = None
if supports_bytes_environ:
try:
- path_listb = env[b'PATH']
+ # ignore BytesWarning warning
+ with warnings.catch_warnings(record=True):
+ path_listb = env[b'PATH']
except (KeyError, TypeError, BytesWarning):
+ # A BytesWarning here means that env has a 'PATH' key, but no
+ # b'PATH' key. See the comment above for an explaination.
pass
else:
if path_list is not None:
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index e413e1f..73261e0 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -461,8 +461,11 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
if os.supports_bytes_environ:
# env cannot contain 'PATH' and b'PATH' keys
try:
- mixed_env = {'PATH': '1', b'PATH': b'2'}
+ # ignore BytesWarning warning
+ with warnings.catch_warnings(record=True):
+ mixed_env = {'PATH': '1', b'PATH': b'2'}
except BytesWarning:
+ # mixed_env cannot be created with python -bb
pass
else:
self.assertRaises(ValueError, os.get_exec_path, mixed_env)