gpt4 book ai didi

python - 为什么 "except:"能够捕获此错误,但不能捕获 "except Exception, e:"?

转载 作者:行者123 更新时间:2023-12-02 05:57:31 27 4
gpt4 key购买 nike

我有以下文件:

from fabric.api import env, execute, run

env.hosts = ['1.2.3.4']

def taskA():
run('ls')

def main():
try:
execute(taskA)
except:
print "Exception Caught"

main()

当我运行这个时,我能够看到“异常捕获”:
$ python test.py
[1.2.3.4] Executing task 'taskA'
[1.2.3.4] run: ls

Fatal error: Timed out trying to connect to 1.2.3.4 (tried 1 time)

Underlying exception:
timed out

Aborting.
Exception Caught

但是,当我切换到这个时:
def main():
try:
execute(taskA)
except Exception, e:
print "Exception Caught", e

main()

我没有看到异常被捕获:
[1.2.3.4] run: ls

Fatal error: Timed out trying to connect to 1.2.3.4 (tried 1 time)

Underlying exception:
timed out

Aborting.

有什么理由让我能够在上面的代码中而不是下面的代码中捕获错误?

最佳答案

此异常并非源自 Exception .它看起来像一个 SystemExit ,源自 BaseException直接地。 except Exception只捕获 Exception 的实例.

如果你真的想捕获所有的异常,你可以用

except BaseException as e:
SystemExitsys.exit 抛出和一些类似的函数会导致解释器关闭(或至少结束线程)同时仍在运行 __exit__方法和 finally块。也可以手动 throw 。
BaseException如此存在 SystemExit并且 except Exception 没有捕捉到一些类似的异常通常不打算处理它们的块。它类似于 Java 的 Throwable .个人希望平淡 except:块没有捕获 BaseException ;它违背了拥有 BaseException 的一些目的首先。

关于python - 为什么 "except:"能够捕获此错误,但不能捕获 "except Exception, e:"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424332/

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