如何在仍然登录时向用户显示错误?

tgr*_*ray 2 python error-handling error-logging exception-handling pyqt4

我正在使用PyQt4用户界面.我已将stderr重定向到日志文件以便于调试和故障排除,但现在我需要在发生错误时向用户显示错误消息.

我的问题是我需要在发生异常时捕获异常并让用户知道它发生了,但仍然让回溯传播到stderr(即日志文件).

如果我做这样的事情:

def updateResults(self):
    try:
        #code that updates the results
    except:
        #display error message box
Run Code Online (Sandbox Code Playgroud)

这将捕获异常而不是传播到错误日志.

有没有办法向用户显示消息,然后继续传播错误?

这会有用吗?

except, e:
    #display error message box
    raise e
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现我的目标?

Ant*_*Roy 6

我想你是以错误的方式思考这个问题.您不应该仅仅为了进一步记录它而重新引发错误.在Python中执行此操作的一种方法是使用日志记录模块.改编自文档:

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)
Run Code Online (Sandbox Code Playgroud)

这提供了比依赖sys.stdout上产生的错误更灵活的日志记录系统.如果可以某种方式从异常中恢复,则可能不需要重新引发异常.