gpt4 book ai didi

Python 在父类(super class)中捕获错误,并在子类中跟踪它

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:36 25 4
gpt4 key购买 nike

最近我对错误处理的一些事情感到非常困扰,并且我没有成功地在互联网上找到答案:

基本上,我的大部分类都是处理不同事物的父类(super class)的后代。

我只想在这个父类(super class)中进行一次错误处理。问题是:我不知道如何跟踪子类的错误!迄今为止我在互联网上找到的最详细的跟踪工具是:

exc_type, exc_obj,  tb = sys.exc_info()
f = tb.tb_frame
lineno = tb.tb_lineno
filename = f.f_code.co_filename
linecache.checkcache(filename)
line = linecache.getline(filename, lineno, f.f_globals)
err_msg = 'Exception in ({}, line {} "{}"): {}'.format(filename, lineno, line.strip(), exc_obj)

traceback.print_stack()

但基本上,它只会引导我尝试显示它的父类(super class)行,所以我不知道它来自哪里,最终我到处使用打印来跟踪我的错误:/

所以基本上:

~==~父类(super class)~==~

1 class MySuperClass(-stuff-):
2 class Meta:
3 abstract = True
4 -stuff-
5
6 def myMethod(-stuff-):
7 try:
8 context = self.myChildMethod(-stuff-)
9 except Exception as e:
10 -display the error from e, and log it-

~==~我的 child 类(class)~==~

1 class ChildClass(MySuperClass):
2 def myChildMethod:
3 -stuff1-
4 -stuff2-
5 -stuff3-
6 return -somestuff-

例如,如果我的错误来自 -stuff2-,我希望获得该错误来自第 4 行包含“ChildClass”的文件的信息。

但是,我最多得到的是父类(super class)的文件,位于第 8 行。

print_stack() 基本上看起来像这样:

lots of lines of the API I don't understand like base.py line 90570930 in blablabla
File -blablabla- super_view.py, line 8, in myMethod
traceback.print_stack()

那么有没有办法爬回到子类,错误实际上来自哪里?

我相信应该有一个但是......我已经搜索了一段时间,而且我仍然坚持这一点,所以如果任何Python专家(或经验丰富的^^)知道这一点.. ..

最佳答案

这是因为你在父类中处理了异常。您有两种选择:-

1) 通过在 stuff2 周围放置 try..catch 并记录它来捕获子类中的异常。2)如果您在父类中捕获异常,则使用

在父类的 catch block 中重新引发异常
raise e, None, sys.exec_info()[2] 

并将 try catch 放入子类的 stuff2 中,正如我在第 1 点中所说的那样。

关于Python 在父类(super class)中捕获错误,并在子类中跟踪它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33602893/

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