@@ -1866,16 +1866,18 @@ def type_check_raise(self, e: Node, s: RaiseStmt) -> None:
1866
1866
1867
1867
def visit_try_stmt (self , s : TryStmt ) -> Type :
1868
1868
"""Type check a try statement."""
1869
+ broken = True
1869
1870
with self .binder .frame_context ():
1870
- with self .binder .frame_context (fall_through = True , clear_breaking = True ):
1871
+ with self .binder .frame_context (fall_through = True , clear_breaking = True ) as frame :
1871
1872
self .binder .try_frames .add (len (self .binder .frames ) - 2 )
1872
1873
self .accept (s .body )
1873
1874
self .binder .try_frames .remove (len (self .binder .frames ) - 2 )
1874
1875
if s .else_body :
1875
1876
self .accept (s .else_body )
1877
+ broken = broken and frame .broken
1876
1878
1877
1879
for i in range (len (s .handlers )):
1878
- with self .binder .frame_context (clear_breaking = True ):
1880
+ with self .binder .frame_context (clear_breaking = True ) as frame :
1879
1881
if s .types [i ]:
1880
1882
t = self .visit_except_handler_test (s .types [i ])
1881
1883
if s .vars [i ]:
@@ -1899,9 +1901,12 @@ def visit_try_stmt(self, s: TryStmt) -> Type:
1899
1901
var = cast (Var , s .vars [i ].node )
1900
1902
var .type = DeletedType (source = source )
1901
1903
self .binder .cleanse (s .vars [i ])
1904
+ broken = broken and frame .broken
1902
1905
1903
1906
if s .finally_body :
1904
1907
self .accept (s .finally_body )
1908
+ if broken :
1909
+ self .binder .breaking_out = True
1905
1910
1906
1911
def visit_except_handler_test (self , n : Node ) -> Type :
1907
1912
"""Type check an exception handler test clause."""
0 commit comments