]> granicus.if.org Git - python/commitdiff
Issue #10210: os.get_exec_path() ignores BytesWarning warnings
authorVictor Stinner <victor.stinner@haypocalc.com>
Fri, 29 Oct 2010 00:38:58 +0000 (00:38 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Fri, 29 Oct 2010 00:38:58 +0000 (00:38 +0000)
Lib/os.py
Lib/test/test_os.py

index 5c80e67eb4d9e02a4133439d00d10d6f5ceb8144..cdc2a66b48c68682320fc8841f2626b5fd6b16e6 100644 (file)
--- 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:
index e413e1facc495408a046000bbaab93d2c5748f77..73261e00b3d8d021ad096eca2c2d0e8a6e56d151 100644 (file)
@@ -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)