]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46442: improve and rename testExceptionCleanupNames (GH-30758)
authorYellow Dusk <yellow.dusk1590@fastmail.com>
Sat, 22 Jan 2022 07:09:34 +0000 (23:09 -0800)
committerGitHub <noreply@github.com>
Sat, 22 Jan 2022 07:09:34 +0000 (02:09 -0500)
The test tested that explicitly deleting the local variable bound to the exception
did not cause problems, but it did not test what it actually claimed to test, i.e.
that the variable is deleted automatically.

Lib/test/test_exceptions.py

index 531b9c92deae5adf4aae0e20cb7a76ddf6b6c8c0..5932b9d4f6677f69568d6c9354ffd39c09428834 100644 (file)
@@ -671,15 +671,27 @@ class ExceptionTests(unittest.TestCase):
         self.assertTrue(str(Exception('a')))
         self.assertTrue(str(Exception('a', 'b')))
 
-    def testExceptionCleanupNames(self):
+    def test_exception_cleanup_names(self):
         # Make sure the local variable bound to the exception instance by
         # an "except" statement is only visible inside the except block.
         try:
             raise Exception()
         except Exception as e:
-            self.assertTrue(e)
+            self.assertIsInstance(e, Exception)
+        self.assertNotIn('e', locals())
+        with self.assertRaises(UnboundLocalError):
+            e
+
+    def test_exception_cleanup_names2(self):
+        # Make sure the cleanup doesn't break if the variable is explicitly deleted.
+        try:
+            raise Exception()
+        except Exception as e:
+            self.assertIsInstance(e, Exception)
             del e
         self.assertNotIn('e', locals())
+        with self.assertRaises(UnboundLocalError):
+            e
 
     def testExceptionCleanupState(self):
         # Make sure exception state is cleaned up as soon as the except