最终语句中的break语句吞下了异常

蒂姆

考虑:

def raiseMe( text="Test error" ):
    raise Exception( text )

def break_in_finally_test():
    for i in range(5):
        if i==2:
            try:
                raiseMe()
            except:
                raise
            else:
                print "succeeded!"
            finally:
                print "testing this!"
                break

if __name__=='__main__':
    break_in_finally_test()

我希望看到Exception( "Test error" )有人提出来,但是只会打印“ testing this”。当然,raiseMe()无论成功与否,我们的意图是只打一次电话,但是如果引发异常,我本来希望看到的!

为什么中断吞下我明确提出的异常?

公吨

https://docs.python.org/2.7/reference/compound_stmts.html#finally

如果最后存在,则指定“清理”处理程序。
执行try子句,包括任何else和else子句。如果在
任何子句中发生异常并且未进行处理,则将临时保存该异常。
将执行finally子句。如果存在已保存的异常,则会
在finally子句的末尾重新引发该异常如果finally子句引发
另一个异常或执行return或break语句,则保存的
异常将被丢弃

这也反映了PEP341try...finally之前语句预期的行为

这是一个尝试,除了finally块看起来像PEP341之前的样子:

try:
    try:
        raiseMe()
    except:
        raise
finally:
    #here is where cleanup is supposed to happen before raising error
    break
    #after finally code: raise error

由于错误的产生永远不会在程序finally段中发生,因此实际上也不会产生。

为了保持与Python <= 2.4的向后兼容性,必须以这种方式完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

if语句位于print语句中?

来自分类Dev

IF语句是否在FOR循环语句中?

来自分类Dev

准备好的语句中的异常

来自分类Dev

C代码中if&switch语句中的异常输出

来自分类Dev

logtash if grok语句中的语句

来自分类Dev

JavaScript语句中的PHP语句

来自分类Dev

php if语句中的return语句

来自分类Dev

If语句中的可执行语句

来自分类Dev

在Python中的if语句中处理异常

来自分类Dev

NodeJS中if语句中的异常行为

来自分类Dev

我在IF语句中丢失了break语句

来自分类Dev

SQL仅在if语句中抛出异常

来自分类Dev

if语句中的多个jquery语句

来自分类Dev

在switch语句中引发异常

来自分类Dev

if语句中的异常

来自分类Dev

'if'语句中的空指针异常

来自分类Dev

“ if”语句中的“ break”

来自分类Dev

switch语句中的Switch语句

来自分类Dev

Tcl IF语句中的多个THEN语句

来自分类Dev

JDBC – create语句中的nullpointer异常

来自分类Dev

assert语句会吞下异常吗?

来自分类Dev

准备好的语句中的异常

来自分类Dev

输入语句中的if语句

来自分类Dev

为什么在switch语句中最终的Byte不能编译?

来自分类Dev

python打印语句中的异常

来自分类Dev

如何检测是否在 If 语句中按下了 button1。网络

来自分类Dev

Break 在我的 if 语句中不起作用

来自分类Dev

python - Break 在我的 if 语句中不起作用

来自分类Dev

PYODBC sql 语句中的 with 语句