mirror of https://github.com/python/cpython
Issue #10210: os.get_exec_path() ignores BytesWarning warnings
This commit is contained in:
parent
bfd7b265b6
commit
6f35eda4d9
14
Lib/os.py
14
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:
|
||||
# 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:
|
||||
# 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:
|
||||
|
|
|
@ -461,8 +461,11 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
|
|||
if os.supports_bytes_environ:
|
||||
# env cannot contain 'PATH' and b'PATH' keys
|
||||
try:
|
||||
# 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)
|
||||
|
|
Loading…
Reference in New Issue