gpt4 book ai didi

python - 了解 Python 中的异常处理

转载 作者:太空宇宙 更新时间:2023-11-03 15:10:34 24 4
gpt4 key购买 nike

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

Q1) 我有点不确定 else 中的操作究竟何时会在异常处理中执行。我不确定何时执行 else block ,这不会出现在以下代码中:

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

最佳答案

当 Python 在函数中遇到 return 语句时,它会立即从函数中返回(退出)。这意味着当您这样做时:

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

“Did we succeed?” 将永远不会被打印,因为您在 try: block 中返回,从而跳过了 else: 的执行> 阻止。


但是您的第二个代码段有所不同,因为您使用了 finally: block 。 finally: block 中的代码始终 执行,无论是否引发异常、您从函数返回等。这是为了确保任何清理代码important(即释放资源)总是被执行并且不会被意外跳过。

您可以在文档中阅读此行为 here :

When return passes control out of a try statement with a finally clause, that finally clause is executed before really leaving the function.

以及here :

When a return, break or continue statement is executed in the try suite of a try...finally statement, the finally clause is also executed "on the way out."


至于为什么输出是:

Yasdsdsa
7.0

而不是:

7.0
Yasdsdsa

答案是 print "Yasdsdsa" 行在 Python 能够打印 7.0 之前在 finally: block 中执行( attempt_float 的返回值)。简单来说,Python的执行路径是:

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

关于python - 了解 Python 中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27391809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com