我有一个 python 测试,其中 setUp 函数需要花费很多时间(几个小时)。我的测试函数失败,为了调试它并检查如何修复异常,我使用 pdb。
问题是当我在一行中出现异常时,我用 pdb 修复它并更改测试函数,我需要重新运行测试,包括非常长的设置,以便进入下一行并且检查它,然后重新开始(它抛出异常,用 pdb、修复等到达它)。
有没有办法实时修补我的脚本,并继续下一行而无需重新运行 hall 脚本?
最佳答案
重新加载模块
您可以将经常更改的代码部分移动到单独的模块中,并为其使用 importlib.reload
。 (在python 3.4之前是imp.reload
,在python 2.x中是内置函数。)
请注意,您应该小心导入:此代码仍将使用过时版本的模块 -
import changing
from changing import func1
...
func1()
...
reload(changing) # ← this will reload import module, but separately imported func1 will remain intact
func1()
这个应该可以用 -
import changing
...
changing.func1()
...
reload(changing)
changing.func1() # ← now the new version is called!
猴子补丁函数
另一种方法,在您的特定情况下不太方便,是移动更改代码,例如模块中的顶级函数,然后替换该函数:
# my_module
def changeable():
# do something
def test_something():
...
changeable()
在 pdb 中:
>>> ...
>>> def new_version():
... new actions ...
>>> my_module.changeable = new_version
>>> my_module.test_something() # ← this will use updated changeable()
关于python - 在 python 中实时修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807931/