为了账号安全,请及时绑定邮箱和手机立即绑定

如何捕获解释器出错?

如何捕获解释器出错?

忽然笑 2019-02-24 21:08:33
一个项目里面需要一个奔溃后发送错误日志的功能。 因为要打包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
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-03-01
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

和Java一样,python也提供了对于checked exception和unchecked exception. 对于checked exception,我们通常使用try except可以显示解决,对于unchecked 异常,其实也是提供回调或者是钩子来帮助我们处理的,我们可以在钩子里面记录崩溃栈追踪或者发送崩溃数据.
下面代码可以实现python unchecked exception回调,并输出日志信息.

!/usr/bin/env python

coding=utf-8

import os, sys
import logging
logger = 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_exception
if name == "__main__":

raise RuntimeError("Test unhandled Exception")
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 593 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信