1

私はLazy Python Reloaderの実装者であり、組み込み__import__関数をオーバーライドすると、ロードされているモジュールにエラーが発生するたびにトレースバックで置換が表示されるようになったことを除いて、すべてがうまく機能しています。たとえば_real_import、以下に の 2 つのインスタンスがありますが、これらは単に気を散らすものであり、組み込みのインポート関数を呼び出しているだけです。

 File "/Library/Python/2.6/site-packages/buildbot-0.8.4_pre_521_gea039fa-py2.6.egg/buildbot/master.py", line 207, in do_load
    exec f in localDict
  File "/Users/dave/src/fossbot-top/master.cfg", line 13, in <module>
    from fossbot import *
  File "/Library/Python/2.6/site-packages/lazy_reload.py", line 83, in _lazy_reload_import
    m = _real_import(name, globals, locals, fromlist, level)
  File "/Users/dave/src/fossbot-top/fossbot/__init__.py", line 22, in <module>
    projects = 'fossbot.projects'
  File "/Users/dave/src/fossbot-top/fossbot/bbot/__init__.py", line 24, in master
    for m in load_submodules(projects):
  File "/Users/dave/src/fossbot-top/fossbot/bbot/util.py", line 30, in load_submodules
    ret.append(_import(parent_module_name+'.'+submodule_name))
  File "/Users/dave/src/fossbot-top/fossbot/bbot/util.py", line 4, in _import
    __import__(module_name)
  File "/Library/Python/2.6/site-packages/lazy_reload.py", line 83, in _lazy_reload_import
    m = _real_import(name, globals, locals, fromlist, level)
  File "/Users/dave/src/fossbot-top/fossbot/projects/el_get.py", line 13, in <module>
    build_procedures=[GitHubElisp('dimitri/el-get')] + 1

lazy_reloadそれらが生成されたときにバックトレースからそれらのフレームを排除する方法があるかどうかは誰にも分かりますか?

4

2 に答える 2

2

できますが、すべきではありませんrunpy(メインモジュールがスイッチ経由で実行されると、標準ライブラリのモジュールでさえスタックトレースに残ります-m)。例外がプログラムの最上位レベルに至るまでエスケープされた場合、どのコンポーネントに問題があったかを事前に正確に知ることは困難です (また、再読み込みが行われているという事実は、重大な問題である可能性が高くなります)。

それでもその道を進みたい場合は、最初に次を参照することをお勧めします: How can I modified a Python traceback object when raise an exception?

そして、テンプレート コードに正確なトレースバックを生成させようとする Jinja2 コード (上記の質問への回答のリンクは古くなっています): https://github.com/mitsuhiko/jinja2/blob/master/jinja2/ debug.py

于 2011-05-02T13:10:59.190 に答える
1

言語をひどくハッキングせずにはいられません。スタックトレースの一部を非表示にすることは通常は悪い考えであるため、これはお勧めしません。特に、モジュールの一部で予期しないエラーが発生した場合。

于 2011-05-01T23:31:41.960 に答える