]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Remove binding of captured exceptions when not used to reduce the chances of creating...
authorPablo Galindo <Pablogsal@gmail.com>
Tue, 19 Nov 2019 21:34:03 +0000 (21:34 +0000)
committerGitHub <noreply@github.com>
Tue, 19 Nov 2019 21:34:03 +0000 (21:34 +0000)
Capturing exceptions into names can lead to reference cycles though the __traceback__ attribute of the exceptions in some obscure cases that have been reported previously and fixed individually. As these variables are not used anyway, we can remove the binding to reduce the chances of creating reference cycles.

See for example GH-13135

28 files changed:
Lib/asynchat.py
Lib/asyncio/proactor_events.py
Lib/asyncio/unix_events.py
Lib/codeop.py
Lib/ctypes/util.py
Lib/enum.py
Lib/filecmp.py
Lib/getpass.py
Lib/importlib/abc.py
Lib/lib2to3/main.py
Lib/msilib/__init__.py
Lib/multiprocessing/managers.py
Lib/multiprocessing/popen_fork.py
Lib/poplib.py
Lib/test/pythoninfo.py
Lib/test/test_cgitb.py
Lib/test/test_class.py
Lib/test/test_codecs.py
Lib/test/test_decimal.py
Lib/test/test_ftplib.py
Lib/test/test_sys_settrace.py
Lib/test/test_time.py
Lib/test/test_traceback.py
Lib/test/test_urllib2net.py
Lib/test/test_uuid.py
Lib/unittest/case.py
Lib/urllib/request.py
Lib/xml/sax/__init__.py

index fc1146adbb10dc5a8a3d0853afd83bdec9ecadb4..f4ba361bd4a3ef81e6801601a2ec83ac765b230e 100644 (file)
@@ -117,7 +117,7 @@ class async_chat(asyncore.dispatcher):
             data = self.recv(self.ac_in_buffer_size)
         except BlockingIOError:
             return
-        except OSError as why:
+        except OSError:
             self.handle_error()
             return
 
index 830d8edc32f90a1538bbf10c4bf2f0881b17e51f..8338449aaa0a3ef843f18411081b6bb836b92542 100644 (file)
@@ -711,7 +711,7 @@ class BaseProactorEventLoop(base_events.BaseEventLoop):
             raise exceptions.SendfileNotAvailableError("not a regular file")
         try:
             fsize = os.fstat(fileno).st_size
-        except OSError as err:
+        except OSError:
             raise exceptions.SendfileNotAvailableError("not a regular file")
         blocksize = count if count else fsize
         if not blocksize:
index 66213728a3dcb29f1733604041c64894f0a83a96..632546ad00817fdd854bfd96a6eaa7c6d0cc6cd8 100644 (file)
@@ -330,7 +330,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
     async def _sock_sendfile_native(self, sock, file, offset, count):
         try:
             os.sendfile
-        except AttributeError as exc:
+        except AttributeError:
             raise exceptions.SendfileNotAvailableError(
                 "os.sendfile() is not available")
         try:
@@ -339,7 +339,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
             raise exceptions.SendfileNotAvailableError("not a regular file")
         try:
             fsize = os.fstat(fileno).st_size
-        except OSError as err:
+        except OSError:
             raise exceptions.SendfileNotAvailableError("not a regular file")
         blocksize = count if count else fsize
         if not blocksize:
index e5c7adea54fbdb800679dce69946b519c81cb691..fc7e1e70ceafe4939dba9c01a3edbb6f76c183e7 100644 (file)
@@ -80,7 +80,7 @@ def _maybe_compile(compiler, source, filename, symbol):
 
     try:
         code = compiler(source, filename, symbol)
-    except SyntaxError as err:
+    except SyntaxError:
         pass
 
     try:
index 97973bce001d9a539bb5e3d2afda194cdc4f2184..01176bf9696577008ffdb6f06bc2bdf2f15752c1 100644 (file)
@@ -302,7 +302,7 @@ elif os.name == "posix":
                 res = re.search(expr, os.fsdecode(out))
                 if res:
                     result = res.group(0)
-            except Exception as e:
+            except Exception:
                 pass  # result will be None
             return result
 
index 8a6e5d2e46d6bb52f2b6efa517146b1b9d493667..06f42a978035be408448e0e85234c088eb5dc7d2 100644 (file)
@@ -420,7 +420,7 @@ class EnumMeta(type):
         if module is None:
             try:
                 module = sys._getframe(2).f_globals['__name__']
-            except (AttributeError, ValueError, KeyError) as exc:
+            except (AttributeError, ValueError, KeyError):
                 pass
         if module is None:
             _make_class_unpicklable(enum_class)
index e5ad8397e4c53956c1503d8abba134015da0a24f..cfdca1e924f5521291276200631fae560c0661e8 100644 (file)
@@ -156,12 +156,12 @@ class dircmp:
             ok = 1
             try:
                 a_stat = os.stat(a_path)
-            except OSError as why:
+            except OSError:
                 # print('Can\'t stat', a_path, ':', why.args[1])
                 ok = 0
             try:
                 b_stat = os.stat(b_path)
-            except OSError as why:
+            except OSError:
                 # print('Can\'t stat', b_path, ':', why.args[1])
                 ok = 0
 
index 36e17e4cb6965db548f445e8e9f156da27d2109b..6911f41d1f2054e73114eb101a0a2d3c102a1b15 100644 (file)
@@ -52,7 +52,7 @@ def unix_getpass(prompt='Password: ', stream=None):
             stack.enter_context(input)
             if not stream:
                 stream = input
-        except OSError as e:
+        except OSError:
             # If that fails, see if stdin can be controlled.
             stack.close()
             try:
index 4b2d3de6d96f18ee74eb236160f5e3526e00f75c..b1b5ccce4bd35d5ccdccd4bab332792c89ae6000 100644 (file)
@@ -10,7 +10,7 @@ except ImportError as exc:
     _frozen_importlib = None
 try:
     import _frozen_importlib_external
-except ImportError as exc:
+except ImportError:
     _frozen_importlib_external = _bootstrap_external
 import abc
 import warnings
index d6b708848ede1ac6c2d6dea5ebaca619d80fc170..c51626babf8ec02ef06ef72e5b3ba4de88b1eb83 100644 (file)
@@ -90,11 +90,11 @@ class StdoutRefactoringTool(refactor.MultiprocessRefactoringTool):
             if os.path.lexists(backup):
                 try:
                     os.remove(backup)
-                except OSError as err:
+                except OSError:
                     self.log_message("Can't remove backup %s", backup)
             try:
                 os.rename(filename, backup)
-            except OSError as err:
+            except OSError:
                 self.log_message("Can't rename %s to %s", filename, backup)
         # Actually write the new file
         write = super(StdoutRefactoringTool, self).write_file
index 0bc8dd9952462c028ec0d9dc0fdf4833c33d1530..0e85aa28967eaf44ddca3514c2c82a5f57f5a358 100644 (file)
@@ -116,7 +116,7 @@ def add_data(db, table, values):
                 raise TypeError("Unsupported type %s" % field.__class__.__name__)
         try:
             v.Modify(MSIMODIFY_INSERT, r)
-        except Exception as e:
+        except Exception:
             raise MSIError("Could not insert "+repr(values)+" into "+table)
 
         r.ClearData()
index 75b5150f821b1cd770870e1b023ea6c80be39761..1f9c2daa25d97f5873ed83d26684c9bd03b13c6d 100644 (file)
@@ -248,7 +248,7 @@ class Server(object):
                     try:
                         obj, exposed, gettypeid = \
                             self.id_to_local_proxy_obj[ident]
-                    except KeyError as second_ke:
+                    except KeyError:
                         raise ke
 
                 if methodname not in exposed:
@@ -296,7 +296,7 @@ class Server(object):
             try:
                 try:
                     send(msg)
-                except Exception as e:
+                except Exception:
                     send(('#UNSERIALIZABLE', format_exc()))
             except Exception as e:
                 util.info('exception in thread serving %r',
index 11e216072d09190282bd999263128f51dc2583b8..a65b06f1b2c75e91e953c16487b89c23f49896d4 100644 (file)
@@ -25,7 +25,7 @@ class Popen(object):
         if self.returncode is None:
             try:
                 pid, sts = os.waitpid(self.pid, flag)
-            except OSError as e:
+            except OSError:
                 # Child process not yet created. See #1731717
                 # e.errno == errno.ECHILD == 10
                 return None
index e3bd2ab1ebc8bd2b08da1631993d344d3e8b5cc1..0b6750d2303760eb0285d71f443af74d3c27c40d 100644 (file)
@@ -385,7 +385,7 @@ class POP3:
             for capline in rawcaps:
                 capnm, capargs = _parsecap(capline)
                 caps[capnm] = capargs
-        except error_proto as _err:
+        except error_proto:
             raise error_proto('-ERR CAPA not supported by server')
         return caps
 
index 797b3af7d3085faaac6874bde902550dd59a4f7e..eab82c3631fd2226459a72ad625cfe2ab373053d 100644 (file)
@@ -754,7 +754,7 @@ def collect_info(info):
     ):
         try:
             collect_func(info_add)
-        except Exception as exc:
+        except Exception:
             error = True
             print("ERROR: %s() failed" % (collect_func.__name__),
                   file=sys.stderr)
index e299ec3ec6ceb59331703412ff62f9f4ceea5a3a..8991bc1ff34badce75c4006ba3baa8d98af87955 100644 (file)
@@ -31,7 +31,7 @@ class TestCgitb(unittest.TestCase):
     def test_text(self):
         try:
             raise ValueError("Hello World")
-        except ValueError as err:
+        except ValueError:
             text = cgitb.text(sys.exc_info())
             self.assertIn("ValueError", text)
             self.assertIn("Hello World", text)
index 456f1be30be04628409163fe7057744294bec7c4..7524f58a3ce732a789f513947fea65837477475a 100644 (file)
@@ -529,7 +529,7 @@ class ClassTests(unittest.TestCase):
             # In debug mode, printed XXX undetected error and
             #  raises AttributeError
             I()
-        except AttributeError as x:
+        except AttributeError:
             pass
         else:
             self.fail("attribute error for I.__init__ got masked")
index e1638c111681c84cd1f65d7d8663238a91621f63..3aec34c7f167d649589016022b040b0ebdfcd5e8 100644 (file)
@@ -11,7 +11,7 @@ from test import support
 
 try:
     import _testcapi
-except ImportError as exc:
+except ImportError:
     _testcapi = None
 
 try:
index 1f37b5372a3e7e2be9e2a92309e22a96dbdd082f..fe0cfc7b66d7e1f5701e9adb3840416a533e65f1 100644 (file)
@@ -5600,13 +5600,13 @@ class SignatureTest(unittest.TestCase):
                     args, kwds = mkargs(C, c_sig)
                     try:
                         getattr(c_type(9), attr)(*args, **kwds)
-                    except Exception as err:
+                    except Exception:
                         raise TestFailed("invalid signature for %s: %s %s" % (c_func, args, kwds))
 
                     args, kwds = mkargs(P, p_sig)
                     try:
                         getattr(p_type(9), attr)(*args, **kwds)
-                    except Exception as err:
+                    except Exception:
                         raise TestFailed("invalid signature for %s: %s %s" % (p_func, args, kwds))
 
         doit('Decimal')
index b0e46411a2e2bf4100dbd7029639986a8507f6f6..b8eef82b15fb36f269b068cba9560797d42ec9fb 100644 (file)
@@ -346,7 +346,7 @@ if ssl is not None:
                 if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
                                    ssl.SSL_ERROR_WANT_WRITE):
                     return
-            except OSError as err:
+            except OSError:
                 # Any "socket error" corresponds to a SSL_ERROR_SYSCALL return
                 # from OpenSSL's SSL_shutdown(), corresponding to a
                 # closed socket condition. See also:
index fdd789475d04dc4ea2e584886e03062cb199ecc0..d4e1ac2c83eff1b7067796c382e32dba5ffb0588 100644 (file)
@@ -161,8 +161,8 @@ def raises():
 def test_raise():
     try:
         raises()
-    except Exception as exc:
-        x = 1
+    except Exception:
+        pass
 
 test_raise.events = [(0, 'call'),
                      (1, 'line'),
@@ -191,7 +191,7 @@ def _settrace_and_raise(tracefunc):
 def settrace_and_raise(tracefunc):
     try:
         _settrace_and_raise(tracefunc)
-    except RuntimeError as exc:
+    except RuntimeError:
         pass
 
 settrace_and_raise.events = [(2, 'exception'),
index 8d8d31e7825e687e78b6921fe55c2d4ad5e6ac50..80e43fafad81307646e0161775b082611dc0da18 100644 (file)
@@ -825,7 +825,7 @@ class CPyTimeTestCase:
                     try:
                         result = pytime_converter(value, time_rnd)
                         expected = expected_func(value)
-                    except Exception as exc:
+                    except Exception:
                         self.fail("Error on timestamp conversion: %s" % debug_info)
                     self.assertEqual(result,
                                      expected,
index 72dc7afb8c5ccfbf476584e088acfbaa14b2d802..7135d997d54ab5c429e6cf6c9916e1bebd761dc0 100644 (file)
@@ -313,7 +313,7 @@ class TracebackFormatTests(unittest.TestCase):
         with captured_output("stderr") as stderr_f:
             try:
                 f()
-            except RecursionError as exc:
+            except RecursionError:
                 render_exc()
             else:
                 self.fail("no recursion occurred")
@@ -360,7 +360,7 @@ class TracebackFormatTests(unittest.TestCase):
         with captured_output("stderr") as stderr_g:
             try:
                 g()
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no value error was raised")
@@ -396,7 +396,7 @@ class TracebackFormatTests(unittest.TestCase):
         with captured_output("stderr") as stderr_h:
             try:
                 h()
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no value error was raised")
@@ -424,7 +424,7 @@ class TracebackFormatTests(unittest.TestCase):
         with captured_output("stderr") as stderr_g:
             try:
                 g(traceback._RECURSIVE_CUTOFF)
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no error raised")
@@ -452,7 +452,7 @@ class TracebackFormatTests(unittest.TestCase):
         with captured_output("stderr") as stderr_g:
             try:
                 g(traceback._RECURSIVE_CUTOFF + 1)
-            except ValueError as exc:
+            except ValueError:
                 render_exc()
             else:
                 self.fail("no error raised")
index 040a2ce276dbdf4b7e3e0bb41a37196a4a5b0185..bb0500e12a49a4701b4bd38735e6c0d6cdd6b290 100644 (file)
@@ -199,7 +199,7 @@ class OtherNetworkTests(unittest.TestCase):
             try:
                 with urllib.request.urlopen(URL) as res:
                     pass
-            except ValueError as e:
+            except ValueError:
                 self.fail("urlopen failed for site not sending \
                            Connection:close")
             else:
index ddf7e6dc1b8e454277da85813f5ac9608f3d6787..b76c60e1ce28ba64d8082883e38ac7d35974af9d 100644 (file)
@@ -471,7 +471,7 @@ class BaseTestUUID:
         # the value from too_large_getter above.
         try:
             self.uuid.uuid1(node=node)
-        except ValueError as e:
+        except ValueError:
             self.fail('uuid1 was given an invalid node ID')
 
     def test_uuid1(self):
index bac9789c943fa73815523eb05db790a988fdc9ff..fa64a6ea2378c0b0da1863dd1a2ce7a393f7ca31 100644 (file)
@@ -712,7 +712,7 @@ class TestCase(object):
             function, args, kwargs = cls._class_cleanups.pop()
             try:
                 function(*args, **kwargs)
-            except Exception as exc:
+            except Exception:
                 cls.tearDown_exceptions.append(sys.exc_info())
 
     def __call__(self, *args, **kwds):
index 721c152179e998dbd94fd4d9a59d8606bb692407..ebc41184f83d58316e752f3dd71e1a484d97fcbb 100644 (file)
@@ -1778,7 +1778,7 @@ class URLopener:
                 hdrs = fp.info()
                 fp.close()
                 return url2pathname(_splithost(url1)[1]), hdrs
-            except OSError as msg:
+            except OSError:
                 pass
         fp = self.open(url, data)
         try:
index a0f5d40b2000ce4089fd1654d304777fe5a81b01..17b75879ebaafad86c812bee53b4b24e01c18802 100644 (file)
@@ -78,7 +78,7 @@ def make_parser(parser_list=()):
     for parser_name in list(parser_list) + default_parser_list:
         try:
             return _create_parser(parser_name)
-        except ImportError as e:
+        except ImportError:
             import sys
             if parser_name in sys.modules:
                 # The parser module was found, but importing it