【发布时间】:2020-03-15 17:27:57
【问题描述】:
我正在尝试访问正在修改的模块 中的变量,而主脚本 使用reload 运行。但是 reload 函数无法擦除已从 module 中删除的变量。如何强制 python 删除它们?
这是我的代码
我的 module.py :
a = 1
b = 2
我的主要scipt.py:
import time
from importlib import reload
import module
while True:
reload(module)
print('------- module reloaded')
try:
print('a: ', module.a)
except AttributeError:
print('a: ', 'undefined')
try:
print('b: ', module.b)
except AttributeError:
print('b: ', 'undefined')
try:
print('c: ', module.c)
except AttributeError:
print('c: ', 'undefined')
time.sleep(5)
正如预期的那样,如果我使用 python (3.5.1) 运行我的 脚本,我会得到输出:
------- module reloaded
a: 1
b: 2
c: undefined
但是当我将 module.py 更改如下时,我得到了一个意外的行为:
# a = 1
b = 3
c = 4
我有以下输出:
------- module reloaded
a: 1
b: 3
c: 4
这意味着reload 正确更新了b 的值并添加了新变量c。但它未能擦除已从 模块 中删除的变量 a。它似乎只对 module 新版本中的变量执行更新。如何强制 reload 函数删除删除的值?
感谢您的帮助
【问题讨论】:
-
如果你将
reload()的返回值赋值给某个东西,然后对返回值做同样的检查,会发生什么?
标签: python python-3.x python-import python-importlib