Fix os.get_exec_path() (code and tests) for python -bb

Catch BytesWarning exceptions.
This commit is contained in:
Victor Stinner 2010-08-19 17:10:18 +00:00
parent 9802b39c12
commit 38430e2dff
2 changed files with 12 additions and 5 deletions

View File

@ -387,13 +387,13 @@ def get_exec_path(env=None):
try: try:
path_list = env.get('PATH') path_list = env.get('PATH')
except TypeError: except (TypeError, BytesWarning):
path_list = None path_list = None
if supports_bytes_environ: if supports_bytes_environ:
try: try:
path_listb = env[b'PATH'] path_listb = env[b'PATH']
except (KeyError, TypeError): except (KeyError, TypeError, BytesWarning):
pass pass
else: else:
if path_list is not None: if path_list is not None:

View File

@ -450,8 +450,12 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
if os.supports_bytes_environ: if os.supports_bytes_environ:
# env cannot contain 'PATH' and b'PATH' keys # env cannot contain 'PATH' and b'PATH' keys
self.assertRaises(ValueError, try:
os.get_exec_path, {'PATH': '1', b'PATH': b'2'}) mixed_env = {'PATH': '1', b'PATH': b'2'}
except BytesWarning:
pass
else:
self.assertRaises(ValueError, os.get_exec_path, mixed_env)
# bytes key and/or value # bytes key and/or value
self.assertSequenceEqual(os.get_exec_path({b'PATH': b'abc'}), self.assertSequenceEqual(os.get_exec_path({b'PATH': b'abc'}),
@ -723,7 +727,10 @@ class ExecTests(unittest.TestCase):
# os.get_exec_path() reads the 'PATH' variable # os.get_exec_path() reads the 'PATH' variable
with _execvpe_mockup() as calls: with _execvpe_mockup() as calls:
env_path = env.copy() env_path = env.copy()
env_path['PATH'] = program_path if test_type is bytes:
env_path[b'PATH'] = program_path
else:
env_path['PATH'] = program_path
self.assertRaises(OSError, self.assertRaises(OSError,
os._execvpe, program, arguments, env=env_path) os._execvpe, program, arguments, env=env_path)
self.assertEqual(len(calls), 1) self.assertEqual(len(calls), 1)