当前位置: 首页 > 面试题库 >

如何从wxPython应用程序捕获所有异常?

郎正平
2023-03-14
问题内容

我正在为我们正在开发的一些套件编写一个小型调试应用程序,我想将其推广给一些用户,看看他们是否会引起崩溃。有谁知道有效包装wxPython应用程序以捕获可能导致应用程序崩溃的所有未处理异常的方法?

理想情况下,我想捕获所有输出(不仅仅是错误)并将其记录到文件中。任何未处理的异常都应记录到当前文件,然后允许该异常照常传递(即,记录过程应该透明)。

我敢肯定有人以前已经做过这些事情,但是我还没有设法通过Google找到任何有用的东西。


问题答案:

为了记录标准输出,可以使用标准输出包装器,例如:

from __future__ import with_statement

class OutWrapper(object):
    def __init__(self, realOutput, logFileName):
        self._realOutput = realOutput
        self._logFileName = logFileName

    def _log(self, text):
        with open(self._logFileName, 'a') as logFile:
            logFile.write(text)

    def write(self, text):
        self._log(text)
        self._realOutput.write(text)

然后,您必须在主Python文件(运行所有文件的文件)中对其进行初始化:

import sys    
sys.stdout = OutWrapper(sys.stdout, r'c:\temp\log.txt')

对于记录异常,最简单的MainLoop方法是将wx.App的方法包装在try..except中,然后提取异常信息,以某种方式保存它,然后通过重新引发异常raise,例如:

try:
    app.MainLoop()
except:
    exc_info = sys.exc_info()
    saveExcInfo(exc_info) # this method you have to write yourself
    raise


 类似资料:
  • 问题 怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有异常。

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 问题内容: 我正在与一个应用程序一起工作,该应用程序从XML Schema生成表单(使用JAXFront库),并将用户填写的数据存储到XML文档中。 我在需要时放置了try-catch-finally块,但是在主线程结束时(AWT线程仍在运行)捕获异常时我有一个小问题。 我有两个班级负责主要工作,其他班级对这个问题并不重要: 主类 :具有以下结构。初始化应用程序并运行主机 } 框架类 :生成视图和

  • 我想捕捉一个在我的手机上运行的Android应用程序的屏幕截图。 我尝试使用屏幕截图UX应用程序。这也可以在无根电话上完成。你知道如何从后台运行的服务中获取Android应用程序的屏幕截图吗? 我希望我的服务定期捕捉屏幕,并发送到服务器。

  • 问题内容: 我问一个有关如何覆盖默认的Java异常处理问题,被告知的答案在这里。 现在的问题是:是否有一种方法可以将该处理程序泛化为所有线程,而无需在每个线程中明确声明? 我认为应该可以某种方式获取所有线程,然后将其绑定到异常处理程序? 问题答案: 使用。正如javadoc所说: “通过设置默认的未捕获异常处理程序,应用程序可以更改那些已经接受系统提供的任何“默认”行为的线程的未捕获异常处理方式(

  • 问题内容: 我有一个程序可以执行为 这将安装一堆东西,并且屏幕上发生了很多活动。 现在,我正在尝试通过执行 希望所有发生在屏幕上的活动都被捕获在(或)中。但是,在进程运行时,内容直接打印到终端,而不会捕获到或中,在进程运行后,它们都为空。 这里会发生什么?如何捕获此内容? 问题答案: 通常,您所做的已经足以将所有输出传递到变量。 一个例外是,如果您正在运行的程序用于直接连接到其控制终端,并通过该终

  • 所需的功能是用于任何未捕获的、向上传播到服务层之外的抛出,以导致回滚。我有点惊讶这不是默认行为,但在谷歌尝试了一下后: 这似乎起作用,除非异常被故意吞下而不被重新抛出。(特定的情况是找不到实体。我想这可以重新设计为不抛出异常,但预计不可避免地会有其他异常-例如,在使用

  • 我在运行python flask web应用程序时得到了这个回溯(最近一次调用是最后一次)。 从烧瓶导入烧瓶app=烧瓶(名称) @app.route ("/") def你好():返回" 我正在终端上运行服务器:“cd Flask\u Blog”,“export Flask\u DEBUG=1” 我也尝试初始化烧瓶模块分配"flask.init()"代码,但我仍然得到错误的网页浏览器! 我做错什么