diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-10-29 00:38:58 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-10-29 00:38:58 (GMT) |
commit | 6f35eda4d9973acf573c14fee0042f8ceef9fce0 (patch) | |
tree | e3e1883596e5a59c40a10f3b0b21f5a73cd3ba1d /Lib | |
parent | bfd7b265b6e14c6e64e0f1fad9c9df5bb54d8f18 (diff) | |
download | cpython-6f35eda4d9973acf573c14fee0042f8ceef9fce0.zip cpython-6f35eda4d9973acf573c14fee0042f8ceef9fce0.tar.gz cpython-6f35eda4d9973acf573c14fee0042f8ceef9fce0.tar.bz2 |
Issue #10210: os.get_exec_path() ignores BytesWarning warnings
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/os.py | 18 | ||||
-rw-r--r-- | Lib/test/test_os.py | 5 |
2 files changed, 20 insertions, 3 deletions
@@ -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) |