if (not getattr(self.body, 'stats', True)
and self.excinfo_target is None
- and (self.target is None or self.is_except_as)):
+ and self.target is None):
# most simple case: no exception variable, empty body (pass)
# => reset the exception state, done
code.putln("PyErr_Restore(0,0,0);")
- if self.is_except_as and self.target:
- # "except ... as x" deletes x after use
- # target is known to be a NameNode
- self.target.generate_deletion_code(code)
code.put_goto(end_label)
code.putln("}")
return
print(b) # raises UnboundLocalError if except clause was executed
return i
+def except_as_raise_with_empty_except(x, a):
+ """
+ >>> except_as_raise_with_empty_except(None, TypeError)
+ >>> except_as_raise_with_empty_except(TypeError('test'), TypeError)
+ >>> except_as_raise_with_empty_except(ValueError('test'), TypeError)
+ Traceback (most recent call last):
+ ValueError: test
+ >>> except_as_raise_with_empty_except(None, TypeError)
+ """
+ try:
+ if x:
+ raise x
+ b = 1
+ except a as b: # previously raised UnboundLocalError
+ pass
+
def except_as_deletes_target_in_gen(x, a):
"""
>>> list(except_as_deletes_target_in_gen(None, TypeError))