1print("noexc-finally")
2try:
3    print("try")
4finally:
5    print("finally")
6
7print("noexc-finally-finally")
8try:
9    print("try1")
10    try:
11        print("try2")
12    finally:
13        print("finally2")
14finally:
15    print("finally1")
16print()
17
18print("noexc-finally-func-finally")
19def func2():
20    try:
21        print("try2")
22    finally:
23        print("finally2")
24
25try:
26    print("try1")
27    func2()
28finally:
29    print("finally1")
30print()
31
32
33print("exc-finally-except")
34try:
35    print("try1")
36    try:
37        print("try2")
38        foo()
39    except:
40        print("except2")
41finally:
42    print("finally1")
43print()
44
45print("exc-finally-except-filter")
46try:
47    print("try1")
48    try:
49        print("try2")
50        foo()
51    except NameError:
52        print("except2")
53finally:
54    print("finally1")
55print()
56
57
58print("exc-except-finally-finally")
59try:  # top-level catch-all except to not fail script
60    try:
61        print("try1")
62        try:
63            print("try2")
64            foo()
65        finally:
66            print("finally2")
67    finally:
68        print("finally1")
69except:
70    print("catch-all except")
71print()
72
73# case where a try-except within a finally cancels the exception
74print("exc-finally-subexcept")
75try:
76    print("try1")
77finally:
78    try:
79        print("try2")
80        foo
81    except:
82        print("except2")
83    print("finally1")
84print()
85
86# case where exception is raised after a finally has finished (tests that the finally doesn't run again)
87def func():
88    try:
89        print("try")
90    finally:
91        print("finally")
92    foo
93try:
94    func()
95except:
96    print("except")
97