bpo-46458: emit code for else of a try block immediately after the try body (GH-30751)

This commit is contained in:
Irit Katriel 2022-01-27 13:40:44 +00:00 committed by GitHub
parent c7f810b34d
commit 3d2ce34716
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 225 additions and 75 deletions

View file

@ -1,7 +1,7 @@
import unittest
class ExceptionTestCase(unittest.TestCase):
class ExceptTestCases(unittest.TestCase):
def test_try_except_else_finally(self):
hit_except = False
hit_else = False
@ -172,6 +172,127 @@ class ExceptionTestCase(unittest.TestCase):
self.assertTrue(hit_finally)
self.assertTrue(hit_except)
def test_nested_exception_in_except(self):
hit_else = False
hit_finally = False
hit_except = False
hit_inner_except = False
hit_inner_else = False
try:
try:
raise Exception('inner exception')
except:
hit_inner_except = True
raise Exception('outer exception')
else:
hit_inner_else = True
except:
hit_except = True
else:
hit_else = True
finally:
hit_finally = True
self.assertTrue(hit_inner_except)
self.assertFalse(hit_inner_else)
self.assertFalse(hit_else)
self.assertTrue(hit_finally)
self.assertTrue(hit_except)
def test_nested_exception_in_else(self):
hit_else = False
hit_finally = False
hit_except = False
hit_inner_except = False
hit_inner_else = False
try:
try:
pass
except:
hit_inner_except = True
else:
hit_inner_else = True
raise Exception('outer exception')
except:
hit_except = True
else:
hit_else = True
finally:
hit_finally = True
self.assertFalse(hit_inner_except)
self.assertTrue(hit_inner_else)
self.assertFalse(hit_else)
self.assertTrue(hit_finally)
self.assertTrue(hit_except)
def test_nested_exception_in_finally_no_exception(self):
hit_else = False
hit_finally = False
hit_except = False
hit_inner_except = False
hit_inner_else = False
hit_inner_finally = False
try:
try:
pass
except:
hit_inner_except = True
else:
hit_inner_else = True
finally:
hit_inner_finally = True
raise Exception('outer exception')
except:
hit_except = True
else:
hit_else = True
finally:
hit_finally = True
self.assertFalse(hit_inner_except)
self.assertTrue(hit_inner_else)
self.assertTrue(hit_inner_finally)
self.assertFalse(hit_else)
self.assertTrue(hit_finally)
self.assertTrue(hit_except)
def test_nested_exception_in_finally_with_exception(self):
hit_else = False
hit_finally = False
hit_except = False
hit_inner_except = False
hit_inner_else = False
hit_inner_finally = False
try:
try:
raise Exception('inner exception')
except:
hit_inner_except = True
else:
hit_inner_else = True
finally:
hit_inner_finally = True
raise Exception('outer exception')
except:
hit_except = True
else:
hit_else = True
finally:
hit_finally = True
self.assertTrue(hit_inner_except)
self.assertFalse(hit_inner_else)
self.assertTrue(hit_inner_finally)
self.assertFalse(hit_else)
self.assertTrue(hit_finally)
self.assertTrue(hit_except)
class ExceptStarTestCases(unittest.TestCase):
def test_try_except_else_finally(self):