2017-07-22 10 views
0

NVDAエラーログを使用してコード内のエラーを確認するにはどうすればよいですか?私はいくつかのエラーのために一見動作しないアドオンを作成しました。エラーログなどの方法でコードをデバッグする方法はありますか?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) 
+0

デベロッパーガイドの例のように、なぜ__gestures = {...}文がないのですか? – Gribouillis

+0

ジェスチャーは、キーボードから何らかの入力をしているときにしかなければなりません。しかし、ここで私はメモ帳++がアクティブなウィンドウになるときにメッセージを出しています –

+0

開発者ガイドでは、バインドされたメソッドの代わりにクラスを 'clsList'に挿入します。あなたは同じことをしようとすることはできませんか?また、何も起こらない場合は、コールバックがイベントにバインドされていない可能性があります。 – Gribouillis

答えて

0

私はNVDAについて何も知りませんが、Pythonプログラムが失敗したとき、彼らは例外を発生させることでそれを行う:

私が直面していますエラーは、次のコードです。おそらく、これらの例外をキャッチしてファイルに送信するメカニズムを含めることができます。たとえば、私が発生する可能性が例外をキャッチし、例えば、ブラウザで表示できるHTMLファイルでそれらを表示するコードにデコレータを追加したのは、NVDA developer's guide

--- 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 --- 

からプラグインを見てみましょう

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 

私はそれが役に立ちそうです。

+0

何がうまくいかなかったのですか? exception.htmlファイルへのパスを調整するか、プラグインのクラス内の他の関数にデコレータを適用する必要があります。それを試してみてください。 – Gribouillis

+0

しかし、raiseとreturnのキーワードは、エディタ内で異常に強調表示されます。また、コードを実行した後、私は違いが見えません。 –

+0

唯一の違いは、装飾されたコールバックの間に例外があった場合、どこかに 'exception.html'というファイルがあることです(このファイルのフルパスを与えることができます)。また、コールバックが実際に実行されることをチェックしたい場合は、 'raise RuntimeError( 'Hello there')のようなコールバック自体で例外を発生させようとすることができます。 – Gribouillis