Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在尝试实施导入->;调试模式模块_Python_Debugging - Fatal编程技术网

Python 正在尝试实施导入->;调试模式模块

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

因此,我试图创建一个模块,当导入时,该模块将导致任何异常进入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的“强制内置”中,以便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