如何显示错误给用户,同时还记录了吗?
-
21-08-2019 - |
题
我使用PyQt4的用户界面。我重定向错误输出到便于调试和故障排除的日志文件,但现在我需要的时候出现错误时显示错误信息给用户。
我的问题是,我需要当它发生时捕捉异常,让用户知道它发生了,但还是让回溯传播到stderr(即日志文件)。
如果我做这样的事情:
def updateResults(self):
try:
#code that updates the results
except:
#display error message box
此将捕获异常,并不会传播到错误日志。
是否有某种方式向用户显示的消息,然后继续传播完成错误?
将这项工作?
except, e:
#display error message box
raise e
有没有更好的方式来完成我的目标是什么?
解决方案
我认为你是在错误的方式思考这个问题。你不应该再提高的错误简单地进一步记录下来就行了。在Python这样做的cannonical方法是使用日志模块。从该文档改编:
import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)
...
try:
# code
except:
logging.debug('Something bad happened', exc_info=True)
# display message box
# raise (if necessary)
这给出了一个灵活得多的日志系统不是依赖于sys.stdout的产生的错误。您可能不需要重新引发异常,如果你可以以某种方式异常中恢复。
其他提示
没错,但你可以
raise
这将重新引发目前处理的异常。
一些额外的信息:
(带PyQt4的),你还需要重新绑定sys.excepthook到自己的函数来捕获所有的未捕获的异常。否则PyQt的将只是把它们打印到控制台,这可能不是你所需要的...
import sys
def excepthook(exc_type, exc_val, tracebackobj):
# do something useful with the uncaught exception
...
def main():
# rebind excepthook
sys.excepthook = excepthook
...
不隶属于 StackOverflow