当我放入finally子句时,raise语句 inexcept不起作用。
所以except块不会产生Exception.
我错过了什么?如果我想重新提高Exceptionafterfinally子句返回值,我需要做什么?
def test():
res = 1
try:
raise Exception
res = 2
except:
print('ha fallado')
raise
finally:
return res
test()
Run Code Online (Sandbox Code Playgroud)
解决方案:
def test():
res = 1
try:
raise Exception
res = 2
except:
print('ha fallado')
raise
finally:
# ... finally code that need to exec
pass
return res
print(test())
Run Code Online (Sandbox Code Playgroud)
这样,如果发生异常,except 块会处理该异常,然后引发它。
如果没有发生异常,则返回该值。
感谢所有的答案!这么快 :)
这是引用文档相关部分的答案:
执行 try 子句,包括任何 except 和 else 子句。如果在任何一个子句中发生异常并且没有被处理,则该异常被临时保存。finally 子句被执行。如果有一个已保存的异常,它会在 finally 子句的末尾重新引发。如果 finally 子句引发另一个异常,则将保存的异常设置为新异常的上下文。如果 finally 子句执行 return 或 break 语句,则丢弃保存的异常:
>>> def f():
... try:
... 1/0
... finally:
... return 42
...
>>> f()
42
Run Code Online (Sandbox Code Playgroud)
PS我不太明白你真正想要实现的目标;正如zmbq链接的最佳答案中所述,您不能真正拥有两者。