From: Serhiy Storchaka Date: Tue, 2 Jan 2018 08:56:40 +0000 (+0200) Subject: [2.7] bpo-32478: Add tests for 'break' and 'return' inside 'finally' clause. (GH... X-Git-Tag: v2.7.15rc1~88 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b495377a8bdd711e9aab0885c60cd148284156e8;p=python [2.7] bpo-32478: Add tests for 'break' and 'return' inside 'finally' clause. (GH-5078). (#5084) (cherry picked from commit 7cc42c356b0dc5ad9eaa9392789e84bd4aa1c7de) --- diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index fc675c35a3..47b6b3e0d1 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -490,6 +490,80 @@ hello world x = g2() check_syntax_error(self, "class foo:return 1") + def test_break_in_finally(self): + count = 0 + while count < 2: + count += 1 + try: + pass + finally: + break + self.assertEqual(count, 1) + + count = 0 + while count < 2: + count += 1 + try: + continue + finally: + break + self.assertEqual(count, 1) + + count = 0 + while count < 2: + count += 1 + try: + 1/0 + finally: + break + self.assertEqual(count, 1) + + for count in [0, 1]: + self.assertEqual(count, 0) + try: + pass + finally: + break + self.assertEqual(count, 0) + + for count in [0, 1]: + self.assertEqual(count, 0) + try: + continue + finally: + break + self.assertEqual(count, 0) + + for count in [0, 1]: + self.assertEqual(count, 0) + try: + 1/0 + finally: + break + self.assertEqual(count, 0) + + def test_return_in_finally(self): + def g1(): + try: + pass + finally: + return 1 + self.assertEqual(g1(), 1) + + def g2(): + try: + return 2 + finally: + return 3 + self.assertEqual(g2(), 3) + + def g3(): + try: + 1/0 + finally: + return 4 + self.assertEqual(g3(), 4) + def testYield(self): check_syntax_error(self, "class foo:yield 1")