为什么此重新加载失败并显示“NameError: name <xxx> is not defined”?

2020年

文件:foo_module.py

#file: foo_module.py
def foo():
    print("Am foo v1")

文件:尝试1.py

#file: attempt1.py
import sys
from time import sleep
from importlib import reload
import foo_module  # <-- import the entire module

print(sys.modules['foo_module']) #Lets see if the module is loaded
while True:
    foo_module.foo()

    #simulate a delay or a condition by when foo_module would have changed
    sleep(2)

    #should reload foo_module to get the latest
    reload(foo_module)

输出:

<module 'foo_module' from 'D:\\pyth\\foo_module.py'>
Am foo v1
Am foo v1
Am foo v1 # I go in around this time and change the foo_module print statement to simulate update to a loaded module
Am foo v2 # Voila ! reload works !
Am foo v2
Am foo v2

这很好,并且按我的预期工作。但以下不起作用!

文件:attempt2.py

#file: attempt2.py
import sys
from time import sleep
from importlib import reload
from foo_module import foo  # <-- import specific item only

#Lets see if the module is loaded
print(sys.modules['foo_module']) 

while True:
    foo()

    #simulate a delay or a condition by when foo_module would have changed
    sleep(2)

    #try to reload foo_module to get the latest
    reload(foo_module) #FAILS !

输出:

<module 'foo_module' from 'D:/pyth\\foo_module.py'>  # <-- Module is loaded. isnt it ?
Am foo v1
Traceback (most recent call last):
  File "D:/pyth/attempt2.py", line 10, in <module>
    reload(foo_module)
NameError: name 'foo_module' is not defined

但是 sys.modules 似乎在这两种情况下都包含 foo_module 的条目!我错过了什么?

菲诺尼斯

归功于https://stackoverflow.com/a/46814062/237105

# Reload via sys.modules as it is not imported directly
reload(sys.modules['foo_module'])
# Then, reimport function
from foo_module import foo

你的总代码,固定:

import sys
from time import sleep
from importlib import reload
from foo_module import foo  # <-- import specific item only

print(sys.modules['foo_module'])
while True:
    foo()

    # simulate a delay or a condition by when foo_module would have changed
    sleep(2)

    # reload foo_module via sys.modules as it is not imported directly
    reload(sys.modules['foo_module'])

    # re-import foo to update it.
    from foo_module import foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我会收到“NameError: name 'self' is not defined”?

为什么python在定义时返回“NameError:name 'correct' is not defined?

NameError: name 'i' is not defined - 为什么会发生这种情况?

导入 kafka 给出“NameError: name 'true' is not defined”

NameError: ("name 'true' is not defined", 'occurred at index 0')

如何修复“NameError: name 'context' is not defined”

如何修复“NameError: name 'color' is not defined”?

如何解决 NameError: name 'xx' is not defined?

为什么会出现 NameError 的错误:name 'file' is not defined in python 3

未捕获的 ReferenceError: "xxx" is not defined (VUE)

iPython调试器引发`NameError:name ... not defined`

不明白这个“NameError: name 'self' is not defined”错误

在类中导入模块时出现“NameError: name [module] is not defined”

“NameError: name 'update' is not defined” 使用数据表时出错

如何解决错误 NameError: name 'SparkConf' is not defined in pycharm

Scrapy:在scrapy 中使用SQLAlchemy 有“NameError: name 'connection' is not defined”

我有一个错误:NameError: name 'GameDisplay' is not defined

错误“NameError: name 'self' is not defined”即使我声明了“self”

raise self._value NameError: name 'global_df' is not defined

无法在 18.04 中添加 PPA 密钥:NameError: name 'KUrl' is not defined

试图从父类继承变量“NameError: name 'r' is not defined”

如何正确配置python 3的使用避免NameError: name '' is not defined

Django连接mysql问题,NameError: name '_mysql' is not defined

在 Django 中使用类型提示 Any - NameError: name 'Any' is not defined

如何使用“name = xxx”进行验证

錯誤:KeyError:key package_name [xxx-xxx-xxx] not found(在 Julia 中)

在 leetcode 中,为什么我收到错误“NameError: global name 'climbStairs' is not defined”?但在没有“自我”和“对象”的情况下工作?

Qt - 连接 C++ 和 QML - ReferenceError: xxx is not defined

为什么在gem5中添加DPRINTF(XXX调试标志失败,并显示“错误:在此作用域中未声明'XXX'”?