所以我试图做一个模块,导入时,会导致任何异常,以放入pdb。我想它会看起来像这样:试图执行导入 - >调试模式模块
#file A.py
import pdbOnException
a = 1/0
print a
#file pdbOnException
import sys, pdb
magic_object = # do magic stuff to get an object that, when called, does what I want :D
try:
magic_object()
except:
tb = sys.exc_info()[2]
pdb.post_mortem(tb)
希望这是相当明显的,我想要做的。我试图做到这一点,以便任何导入此模块的模块将其未处理的异常转到pdb。
编辑:我想我应该补充我想用的东西,看看你是否知道这件事。我打算在eclipse的“Forced Builtins”中加入这个模块,这样eclipse就会拥有这个功能(这是需要的) 任何人都可以帮助我吗?编辑2:在玩eclipse后,看起来好像没有办法强制eclipse在运行任何代码之前运行一组代码(即像PYTHONSTARTUP)。这很糟糕。所以我想我会去装修。
如果您仍然对如何通过导入模块来实现这一点有所了解,那么我就是所有人。它可以添加到IDLE启动脚本中。
更新: 我刚刚得到了一些使用装饰器的东西,但用户必须调用它的主要功能(这不是世界的尽头......但我想要更多的功能)。它是:
def pdb_on_exception(function):
def returnfunction(*args, **kwargs):
try:
return function(*args, **kwargs)
except Exception as E:
traceback.print_tb(sys.exc_info()[2])
print E
tb = sys.exc_info()[2]
pdb.post_mortem(tb)
return returnfunction
如果正在装饰的函数存在未处理的异常,这将使您进入pdb。这是很酷,但仍然不是我想要的:d
类似于你的装饰器,你也可以设计一个上下文管理器来做到这一点。我看不出有什么方法可以使它们伸出并影响导入模块 - 您需要修改Eclipse以使用新的上下文管理器来包装所有导入模块的执行。 – ncoghlan 2011-04-01 18:00:15
我希望我知道如何修改eclipse来做到这一点...我正在做更多的更新与我的更多尝试。 – 2011-04-01 18:45:02