Skip to content

Commit 2a877ad

Browse files
[2.7] bpo-32478: Add tests for 'break' and 'return' inside 'finally' clause. (GH-5078).
(cherry picked from commit 7cc42c3)
1 parent 2de47ca commit 2a877ad

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
@@ -490,6 +490,80 @@ def g2(): return 1
490490
x = g2()
491491
check_syntax_error(self, "class foo:return 1")
492492

493+
def test_break_in_finally(self):
494+
count = 0
495+
while count < 2:
496+
count += 1
497+
try:
498+
pass
499+
finally:
500+
break
501+
self.assertEqual(count, 1)
502+
503+
count = 0
504+
while count < 2:
505+
count += 1
506+
try:
507+
continue
508+
finally:
509+
break
510+
self.assertEqual(count, 1)
511+
512+
count = 0
513+
while count < 2:
514+
count += 1
515+
try:
516+
1/0
517+
finally:
518+
break
519+
self.assertEqual(count, 1)
520+
521+
for count in [0, 1]:
522+
self.assertEqual(count, 0)
523+
try:
524+
pass
525+
finally:
526+
break
527+
self.assertEqual(count, 0)
528+
529+
for count in [0, 1]:
530+
self.assertEqual(count, 0)
531+
try:
532+
continue
533+
finally:
534+
break
535+
self.assertEqual(count, 0)
536+
537+
for count in [0, 1]:
538+
self.assertEqual(count, 0)
539+
try:
540+
1/0
541+
finally:
542+
break
543+
self.assertEqual(count, 0)
544+
545+
def test_return_in_finally(self):
546+
def g1():
547+
try:
548+
pass
549+
finally:
550+
return 1
551+
self.assertEqual(g1(), 1)
552+
553+
def g2():
554+
try:
555+
return 2
556+
finally:
557+
return 3
558+
self.assertEqual(g2(), 3)
559+
560+
def g3():
561+
try:
562+
1/0
563+
finally:
564+
return 4
565+
self.assertEqual(g3(), 4)
566+
493567
def testYield(self):
494568
check_syntax_error(self, "class foo:yield 1")
495569

0 commit comments

Comments
 (0)