了解Python中的异常处理

用户名

关于异常处理,我有两个问题。

Q1)我不确定else在异常处理中何时准确执行其中的操作。我不确定什么时候该else块将被执行,这在下面的代码中不会发生:

def attempt_float(SecPrice,diffprice):
    try:
        return float(SecPrice)
    except:
        return diffprice
    else: 
        print "Did we succeed?"

print attempt_float('7','3') 

Q2)当我运行下面的代码时:

def attempt_float(SecPrice,diffprice):
    try:
        return float(SecPrice)
    except:
        return diffprice
    else: 
        print "Did we succeed?"
    finally:
        print "Yasdsdsa"

print attempt_float('7','3')

我不清楚为什么输出是:

Yasdsdsa
7.0
用户2555451

当Python在函数内部遇到返回语句时,它将立即从函数返回(退出)。这意味着您执行以下操作:

try:
    return float(SecPrice)
...
else: 
    print "Did we succeed?"

"Did we succeed?"因为您返回了该try:块,所以将永远不会打印,从而跳过该else:的执行


但是,第二个代码段是不同的,因为您使用了一个finally:块。无论是否引发异常,从函数返回等,始终执行finally:内的代码。这是为了确保始终执行并且不意外跳过任何重要的清除代码(即释放资源)。

您可以在以下两个文档中了解有关此行为的信息

return将控制从try带有finally子句语句传递出去时,该finally子句在真正离开函数之前执行。

以及这里

returnbreak或者continue声明在执行try一套一的try...finally声明中,finally还执行条款“的出路。”


至于为什么输出是:

Yasdsdsa
7.0

并不是:

7.0
Yasdsdsa

答案是该print "Yasdsdsa"行在finally:Python能够打印之前的代码块中执行7.0(返回值attempt_float)。简而言之,Python的执行路径为:

  1. 返回float(SecPrice)
  2. 运行finally:块。
  3. 使用该print attempt_float('7','3')恢复正常执行并打印7.0

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章