我使用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
    ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top