我是the Lazy Python Reloader的实现者,它都运行得非常好,除了一旦我重写了内置的__import__
函数,每当加载模块中出现错误时,我就开始在回溯中看到我的替换。例如,下面有两个_real_import
实例,它们只是通过调用内置导入函数来分散注意力:
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
是否有办法从回溯中消除这些帧?
你可以但你也不应该(即使是标准库的
runpy
模块在主模块通过-m
开关执行时也会留在堆栈跟踪中)。当一个异常一直逃逸到程序的顶层时,很难事先确切地知道哪些组件出了故障(而且正在重新加载的事实很有可能是重要的)。在如果你还想继续走下去,我建议你先看看: How can I modify a Python traceback object when raising an exception?
然后在Jinja2代码中,它试图使模板代码产生准确的回溯(上面问题答案中的链接已过时): https://github.com/mitsuhiko/jinja2/blob/master/jinja2/debug.py
如果没有严重的语言黑客攻击。我不建议这样做,也因为隐藏堆栈跟踪的一部分通常不是一个好主意。尤其是如果模块的某个部分引入了意外错误。在
相关问题 更多 >
编程相关推荐