0

如何使用 NVDA 错误日志检查代码中的错误?我创建了一个插件,由于某些错误,它似乎无法正常工作。如何使用错误日志或任何其他可能的方法调试我的代码?

我面临的错误在以下代码中:

import globalPluginHandler
import ui
import versionInfo
from NVDAObjects.window.scintilla  import Scintilla

class GlobalPlugin(globalPluginHandler.GlobalPlugin):
  def _messag(self, gesture):
    ui.message("notepad++ opened") # speak hello when notepad++ is the current screen

  def chooseNVDAObjectOverlayClasses(self, obj, clsList):
    if obj.windowClassName == u'Scintilla' and obj.windowControlID == 0:
       clsList.insert(0, self._messag)
4

1 回答 1

0

我对 NVDA 一无所知,但是当 python 程序失败时,它们会通过引发异常来实现。您也许可以包含一种机制来捕获这些异常并将它们发送到文件中。例如,让我们从NVDA 开发人员指南中获取一个插件

--- start ---
# Version announcement plugin for NVDA
# Developer guide example 2

import globalPluginHandler
import ui
import versionInfo

class GlobalPlugin(globalPluginHandler.GlobalPlugin):

    @MY_EXCEPTION_CATCHER
    def script_announceNVDAVersion(self, gesture):
        ui.message(versionInfo.version)

    __gestures={
        "kb:NVDA+shift+v": "announceNVDAVersion",
    }

--- end ---

我在代码中添加了一个装饰器,用于捕获可能发生的异常并将它们显示在可以在浏览器中显示的 html 文件中

import functools
import cgitb
import sys

def MY_EXCEPTION_CATCHER(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception:
            with open('exception.html', 'w') as outfile:
                outfile.write(cgitb.html(sys.exc_info())
            raise
    return wrapper

我希望它有所帮助。

于 2017-07-22T07:05:15.103 回答