目前,如果我执行sample.py,我可以获取导出文本文件的异常信息。
然而,一旦异常发生,程序就不会显示异常和屏幕,
并且它不会执行以下代码。所以我在终端
上看不到字符串"you should check the result on export file"
我怎么能得到我想要的东西。感谢〜
def handleException(excType, excValue, trace):
file = StringIO()
cgitb.Hook(file=file, display=True, format='text')(excType, excValue, trace)
...
sys.excepthook = handleException
import excepthook
def test_divide_zero_exception():
register_exception_sender("Test")
1/0
print("you should check the result on export file")
答案 0 :(得分:1)
在Python 2.7中,这是documentation of sys.excepthook()
:
此函数打印出sys.stderr的给定回溯和异常。
当引发异常并且未被捕获时,解释器使用三个参数调用sys.excepthook,异常类,异常实例和回溯对象。在交互式会话中,这发生在控制返回到提示之前;在Python程序中就在程序退出之前发生。可以通过为sys.excepthook分配另一个三参数函数来自定义这种顶级异常的处理。
(文档为substantially the same in 3.x。)
没有合理的可能性(没有摆弄字节码和实现细节,或者对代码执行高度复杂的AST转换)以便在异常发生的地方恢复执行。通过调用原始的sys.excepthook()
函数, 可以获得打印回溯的“标准”行为:
import sys
original_excepthook = sys.excepthook
def handleException(excType, excValue, trace):
file = StringIO()
cgitb.Hook(file=file, display=True, format='text')(excType, excValue, trace)
...
original_excepthook(excType, excValue, trace)
sys.excepthook = handleException
除了您安装的任何自定义之外,这将正常打印回溯。但是,它不允许您恢复发生异常的位置。如果您想根据具体情况处理异常,则需要使用try
/except
代替。
答案 1 :(得分:0)
并且它不会执行以下代码。所以我没有看到字符串 "你应该检查导出文件的结果"在终端上
我认为当你真正需要一个try-except块时,你正试图做一些太复杂的事情。
import traceback
try:
x = 1/0
self.some_code_that_depends_on_x(x)
except: # try to catch specific exceptions here
traceback.print_exc(file=sys.stderr) # or your exception file
print("you should check the result on export file") # the following code works