Python 正在尝试实施导入->;调试模式模块
因此,我试图创建一个模块,当导入时,该模块将导致任何异常进入pdb。我想它会像这样:Python 正在尝试实施导入->;调试模式模块,python,debugging,Python,Debugging,因此,我试图创建一个模块,当导入时,该模块将导致任何异常进入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
#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的“强制内置”中,以便eclipse具有此功能(这是非常需要的)
有人能帮我吗
Edit2:在玩了一堆eclipse之后,似乎没有办法强迫eclipse在运行任何代码之前先运行一组代码(比如PYTHONSTARTUP)。真糟糕。因此,我想我会选择装饰师
如果您仍然知道如何通过导入模块来实现这一点,我洗耳恭听。可以将其添加到空闲启动脚本中
更新:
我刚刚用decorator做了一些工作,但是用户必须为他们的主要功能调用它(这不是世界末日…但是我想要更多的功能)。这是:
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这很简单,您只需挂接到sys.excepthook: fullofeels.py:
import sys, pdb
def except_hook(exctype, value, traceback):
if previous_except_hook:
previous_except_hook(exctype, value, traceback)
pdb.post_mortem(traceback)
previous_except_hook = sys.excepthook
sys.excepthook = except_hook
用法:
通常,我们只是得到一个回溯:
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>1/0
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ZeroDivisionError:整数除法或模零除法
但如果进口全套设备,我们将进入pdb:
>>> import fullofeels
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
> <stdin>(1)<module>()
(Pdb)
>>导入完整的文件
>>> 1/0
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ZeroDivisionError:整数除法或模零除法
> (1)()
(Pdb)
塔达
我不知道气垫船里有多少鳗鱼,但对于简单的情况,它可以工作。与您的装饰师类似,您也可以设计一个上下文管理器来实现这一点。我看不到任何方法可以让它影响导入模块-您需要修改Eclipse,用新的上下文管理器包装所有导入模块的执行。我希望我知道如何修改Eclipse来实现这一点。。。我正在用更多的尝试做另一个更新。如果你知道excepthook,这很容易!非常感谢!(我还不能投票,但我会尽快投票)哦,很好-我甚至没有想到
excepthook
,因为我是从执行脚本的角度看它的,而不是从交互式提示的角度看它。@Garrett:既然你问了这个问题,你应该有一个“接受答案”按钮,你们可以点击。因为我以前不能投票,它并没有弹出,但它只是在我投票时弹出。回答被接受,谢谢:D