GUIで特定の種類の例外に関する追加のデバッグ情報を生成および表示するnose用のプラグインを作成しようとしています。これをプラグインで実行したい理由は、--enable-gui
オプションが指定された場合にのみ GUI を起動したいからです。プラグインはコマンドライン オプションをノーズ ランナーに追加する唯一の方法です。
addFailure(step, err)
ドキュメントによると、 andをオーバーライドする必要があり、それがタプルaddError(step, err)
であると言われています。err
sys.exc_info()
http://nose.readthedocs.org/en/latest/plugins/interface.html
残念ながら、私はまったく別のものを得ています.例外は、それを表す文字列値に置き換えられます. これが私のコードです:
def addError(self, test, err):
info = ', '.join((type(x).__name__) for x in err)
open('/tmp/xxxxx', 'a').write(info + '\n')
def addFailure(self, test, err):
info = ', '.join((type(x).__name__) for x in err)
open('/tmp/xxxxx', 'a').write(info + '\n')
出力は次のとおりです。
type, str, traceback
type, str, traceback
だから、代わりにexc_type, exc_value, exc_tb
、私は得てexc_type, str(exc_value), exc_tb
います。
オーバーライドされたメソッドへの呼び出しのスタックは次のとおりです。
Traceback (most recent call last):
File "runtests.py", line 6, in <module>
nose.main(module=tests, addplugins=tests.plugins.get_all_plugins())
File "/usr/lib/python2.7/dist-packages/nose/core.py", line 118, in __init__
**extra_args)
File "/usr/lib/python2.7/unittest/main.py", line 95, in __init__
self.runTests()
File "/usr/lib/python2.7/dist-packages/nose/core.py", line 197, in runTests
result = self.testRunner.run(self.test)
File "/usr/lib/python2.7/dist-packages/nose/core.py", line 61, in run
test(result)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 176, in __call__
return self.run(*arg, **kw)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 223, in run
test(orig)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 176, in __call__
return self.run(*arg, **kw)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 223, in run
test(orig)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 176, in __call__
return self.run(*arg, **kw)
File "/usr/lib/python2.7/dist-packages/nose/suite.py", line 223, in run
test(orig)
File "/usr/lib/python2.7/dist-packages/nose/case.py", line 45, in __call__
return self.run(*arg, **kwarg)
File "/usr/lib/python2.7/dist-packages/nose/case.py", line 138, in run
result.addError(self, err)
File "/usr/lib/python2.7/dist-packages/nose/proxy.py", line 134, in addError
plugins.addError(self.test, err)
File "/usr/lib/python2.7/dist-packages/nose/plugins/manager.py", line 94, in __call__
return self.call(*arg, **kw)
File "/usr/lib/python2.7/dist-packages/nose/plugins/manager.py", line 162, in simple
result = meth(*arg, **kw)
File "<snip>/plugins.py", line 31, in addError
open('/tmp/xxxxx', 'a').write(info + '\n')
から例外を抽出できませんsys.exc_info()
。これは、既に別の例外に置き換えられているためです (特に、発生した例外のUnicodeEncodeError
中にキャッチされ__str__
たもの)。
exc_value
トレースバックなど、どこかから抽出する方法はありますか?
潜在的な回避策: プラグインをグローバル変数にすることができることを知っています。その中で例外を処理する代わりに、情報をプラグイン自体に直接送信できます。残念ながら、それはあまりきれいな解決策ではないので、避けたいと思います。
GUI が必要な理由: 表示されるエラーは、twisted によって作成された色付きの HTML トレースバックです。これは、HTML を印刷しているかhtml2text
表現を使用しているかに関係なく、コンソールで読み取ることができません。