前面提到的唯一的解决方案是一个脚本,假设您正在调试mymod.py,那么您有以下选项在mymod.py中重新创建状态#my stuff
...
if __name__ == "__main__":
import os, numpy
a = 'blah'
bar = 229
print "debugging environment ready"
用IDLE打开它并运行它(F5),或者用python -i mymod.py在交互模式下打开它
制作一个新的脚本来测试它,比如mytest.py
^{pr2}$
并在空闲或交互模式下运行此程序
在这两种情况下,都需要在会话中重新创建期望状态,如果需要不同的状态,则将其放入脚本中。在
例如,在空闲时,你得到的第一个================= RESTART: C:\Users\David\Documents\Python Scripts\mymod.py =================
debugging environment ready
>>> a
'blah'
>>> bar
229
>>> os
>>>
第二个呢================ RESTART: C:/Users/David/Documents/Python Scripts/mytest.py ================
debugging environment in outside script ready
>>> a
'blah'
>>> os
>>> bar
229
>>> mymod
>>>更复杂的选择是在shell中执行此操作>>> import mymod
>>> import os, numpy
>>> a = "blah"
>>> bar = 229
假设您在mymod.py公司,例如添加这行new_stuff = 42>>> mymod.new_stuff
Traceback (most recent call last):
File "", line 1, in
mymod.new_stuff
AttributeError: 'module' object has no attribute 'new_stuff'
>>> import sys
>>> del sys.modules["mymod"]
>>> import mymod
>>> mymod.new_stuff
42
>>> a
'blah'
如您所见,如果不重新加载mymod,则尝试访问新的_stuff失败,解决方案是重新导入mymod,但这样做只需访问以前加载的版本,因此您需要通过从中删除它来删除它系统模块第一。在
这样做可以保持你的状态,每次你想看到mymod中的变化,你必须执行这个过程。在
但是请注意,您可能会发现这种方法的奇怪行为,例如:假设您在mymod.py公司在class A:
def __init__(self):
self.a = 42
你会发现这个类以前的实例不再被重新处理>>> b = mymod.A()
>>> del sys.modules["mymod"]
>>> import mymod
>>> c = mymod.A()
>>> b.a
42
>>> c.a
42
>>> isinstance(b,mymod.A)
False
>>> isinstance(c,mymod.A)
True
>>> b
>>> c
>>>