小编Mr.*_*ius的帖子

使用Pdb进行Python调试

我正在使用带有ipdb的交互式图形Python调试器(Canopy的图形化调试器).我正在处理的脚本有多个导入的模块和几个调用它们各自的功能.每当我尝试调试运行时,执行就会在对导入模块的函数(特别是子进程)的调用中卡住.我的两个主要问题是:

1)在调试模式下运行会大大减慢速度吗?代码实际上是不是卡住了,而只是以一种非常缓慢的速度运行?

2)有没有办法完全传递代码并运行它们就好像我甚至没有调试一样?我想阻止调试器进入子进程,只是执行它就像正常运行一样.

我可能会抛弃图形化调试器,并从终端做所有事情,但我想避免这种情况,因为图形界面非常方便,节省了很多打字.

python debugging ipdb canopy

5
推荐指数
1
解决办法
334
查看次数

拦截对象属性上的 __getitem__ 调用

问题:如何拦截__getitem__对对象属性的调用?

解释:

所以,场景如下。我有一个对象将类似 dict 的对象存储为属性。每次__getitem__调用此属性的方法时,我都想拦截该调用并根据键对获取的项目进行一些特殊处理。我想要的看起来像这样:

class Test:

    def __init__(self):
        self._d = {'a': 1, 'b': 2}

    @property
    def d(self, key):
        val = self._d[key]
        if key == 'a':
            val += 2
        return val
t = Test()
assert(t.d['a'] == 3) # Should not throw AssertionError
Run Code Online (Sandbox Code Playgroud)

问题是 @property 方法实际上无法访问__getitem__调用中的密钥,所以我根本无法检查它来执行我的特殊后处理步骤。

重要说明:我不能只是对 MutableMapping 进行子类化,覆盖__getitem__我子类的方法来执行此特殊处理,并将子类的实例存储在self._d. 在我的实际代码self._d中已经是 MutableMapping 的子类,这个子类的其他客户端需要访问未修改的数据。

感谢您的任何帮助!

python oop

5
推荐指数
1
解决办法
948
查看次数

标签 统计

python ×2

canopy ×1

debugging ×1

ipdb ×1

oop ×1