Skip to content

Commit 7cc42c3

Browse files
bpo-32478: Add tests for 'break' and 'return' inside 'finally' clause. (#5078)
1 parent e8ed965 commit 7cc42c3

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

Lib/test/test_grammar.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,80 @@ def g2(): return 1
805805
x = g2()
806806
check_syntax_error(self, "class foo:return 1")
807807

808+
def test_break_in_finally(self):
809+
count = 0
810+
while count < 2:
811+
count += 1
812+
try:
813+
pass
814+
finally:
815+
break
816+
self.assertEqual(count, 1)
817+
818+
count = 0
819+
while count < 2:
820+
count += 1
821+
try:
822+
continue
823+
finally:
824+
break
825+
self.assertEqual(count, 1)
826+
827+
count = 0
828+
while count < 2:
829+
count += 1
830+
try:
831+
1/0
832+
finally:
833+
break
834+
self.assertEqual(count, 1)
835+
836+
for count in [0, 1]:
837+
self.assertEqual(count, 0)
838+
try:
839+
pass
840+
finally:
841+
break
842+
self.assertEqual(count, 0)
843+
844+
for count in [0, 1]:
845+
self.assertEqual(count, 0)
846+
try:
847+
continue
848+
finally:
849+
break
850+
self.assertEqual(count, 0)
851+
852+
for count in [0, 1]:
853+
self.assertEqual(count, 0)
854+
try:
855+
1/0
856+
finally:
857+
break
858+
self.assertEqual(count, 0)
859+
860+
def test_return_in_finally(self):
861+
def g1():
862+
try:
863+
pass
864+
finally:
865+
return 1
866+
self.assertEqual(g1(), 1)
867+
868+
def g2():
869+
try:
870+
return 2
871+
finally:
872+
return 3
873+
self.assertEqual(g2(), 3)
874+
875+
def g3():
876+
try:
877+
1/0
878+
finally:
879+
return 4
880+
self.assertEqual(g3(), 4)
881+
808882
def test_yield(self):
809883
# Allowed as standalone statement
810884
def g(): yield 1

0 commit comments

Comments
 (0)