如何捕获解释器出错?

一个项目里面需要一个奔溃后发送错误日志的功能。
因为要打包exe, 所以不想写另外一个新exe。然后监控PID什么的。想在一个py。里面完成。求大神给方案

这个是简单的奔溃代码。

from multiprocessing import Process
import time
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

got_error = 'got!!'

def timetask():
    try:
        while 1:
            time.sleep(.1)
    except:
        print got_error

aaa = QApplication(sys.argv)

p = Process(target = timetask,)
if __name__ == '__main__':
    p.start()

for a in xrange(1000):
    az = QThread()
    az.start()

p.join()

try:
    aaa.exec_()
except:
    print got_error
忽然笑
浏览 594回答 2
2回答

富国沪深

PyQt4的异常可能是底层的异常,也可能是sip的异常,这里不是解释器的范畴,解释器无法捕捉到这个异常的。所以你还是另外启动一个进程去管理更靠谱些。

慕桂英3389331

和Java一样,python也提供了对于checked exception和unchecked exception. 对于checked exception,我们通常使用try except可以显示解决,对于unchecked 异常,其实也是提供回调或者是钩子来帮助我们处理的,我们可以在钩子里面记录崩溃栈追踪或者发送崩溃数据. 下面代码可以实现python unchecked exception回调,并输出日志信息. !/usr/bin/env python coding=utf-8 import os, sysimport logginglogger = logging.getLogger(__name__)handler = logging.StreamHandler(stream=sys.stdout)logger.addHandler(handler)def handle_exception(exc_type, exc_value, exc_traceback): if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exceptionif name == "__main__": raise RuntimeError("Test unhandled Exception")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python