gpt4 book ai didi

python 如何重新引发已经捕获的异常?

转载 作者:行者123 更新时间:2023-12-02 08:38:12 26 4
gpt4 key购买 nike

import sys
def worker(a):
try:
return 1 / a
except ZeroDivisionError:
return None


def master():
res = worker(0)
if not res:
print(sys.exc_info())
raise sys.exc_info()[0]

如上面的代码片段所示,我有一堆像worker这样的函数。他们已经有自己的 try- except block 来处理异常。然后一个主函数将调用每个工作线程。现在,sys.exc_info()返回所有None到3个元素,如何重新引发master函数中的异常?我正在使用Python 2.7

一项更新: 我有1000多个worker,有些worker的逻辑非常复杂,他们可能同时处理多种类型的异常。所以我的问题是我可以直接从 master 中提出这些异常而不是编辑作品吗?

最佳答案

在您的情况下,worker 中的异常返回 None。一旦发生这种情况,就无法恢复异常。如果您的主函数知道每个函数的返回值应该是什么(例如,worker 中的 ZeroDivisionError reutrns None,您可以手动重新引发异常。

如果您无法自行编辑工作函数,我认为您无能为力。您也许可以使用some of the solutions from this answer ,如果它们在代码中以及在控制台上都可以工作。

krflol 上面的代码有点像 C 处理异常的方式 - 有一个全局变量,每当异常发生时,它就会被分配一个数字,以后可以交叉引用该数字来找出异常是什么。这也是一个可能的解决方案。

不过,如果您愿意编辑工作函数,那么将异常升级到调用该函数的代码实际上非常简单:

try: 
# some code
except:
# some response
raise

如果您在 catch block 末尾使用空白 raise,它将重新引发刚刚捕获的相同异常。或者,如果您需要调试打印,则可以命名异常,并执行相同的操作,甚至引发不同的异常。

except Exception as e:
# some code
raise e

关于python 如何重新引发已经捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197783/

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