2011-05-01 31 views
1

我是the Lazy Python Reloader的實現者,它的工作都非常好,除了一旦我覆蓋內置的__import__函數,我開始看到我在每當出現錯誤時在回溯中進行替換在正在加載的模塊中。例如,在下面的_real_import兩個實例,這只是一個分心 - 它們只是調用通過對內置導入功能:我怎樣才能消除我自定義__import__掛鉤從Python回溯

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消除這些辦法生成時從回溯的幀?

回答

1

不是沒有嚴重黑客的語言。我不會推薦這個,因爲隱藏堆棧跟蹤的一部分通常是一個壞主意。特別是如果您的模塊的一部分引入意外錯誤。

2

可以但你也不應該(當主模塊通過-m開關即使執行標準庫的runpy模塊離開自己的堆棧跟蹤)。當一個異常逃到程序的最高層時,很難提前知道哪些組件出錯(以及重新加載的事實很有可能是重要的)。

如果仍想繼續沿着這條路走下去,我建議首先考慮看看: How can I modify a Python traceback object when raising an exception?

然後在它試圖使模板代碼產生精確回溯(在答案的鏈接的Jinja2碼以上問題已過時): https://github.com/mitsuhiko/jinja2/blob/master/jinja2/debug.py