没有定义给出NameError:name'reload'的重新加载模块

时间:2009-06-07 03:55:16

标签: python python-3.x

我正在尝试重新加载我已经在Python 3中导入的模块。我知道您只需要导入一次并再次执行import命令将不会执行任何操作。

执行reload(foo)会出现此错误:

Traceback (most recent call last):
    File "(stdin)", line 1, in (module)
    ...
NameError: name 'reload' is not defined

错误是什么意思?

8 个答案:

答案 0 :(得分:214)

reload是Python 2中的内置函数,但在Python 3中没有,因此预期会出现错误。

如果你真的必须在Python 3中重新加载模块,你应该使用:

答案 1 :(得分:72)

对于> = Python3.4:

import importlib
importlib.reload(module)

For< = Python3.3:

import imp
imp.reload(module)

对于Python2.x:

使用内置的reload()功能。

reload(module)

答案 2 :(得分:48)

import imp
imp.reload(script4)

答案 3 :(得分:33)

要扩展以前编写的答案,如果您想要一个适用于Python版本2和3的单一解决方案,您可以使用以下内容:

try:
    reload  # Python 2.7
except NameError:
    try:
        from importlib import reload  # Python 3.4+
    except ImportError:
        from imp import reload  # Python 3.0 - 3.3

答案 4 :(得分:11)

我建议使用以下代码片段,因为它适用于所有python版本(需要six):

from six.moves import reload_module
reload_module(module)

答案 5 :(得分:1)

要获得python2和python3的兼容性,可以使用:

# Python 2 and 3
from imp import reload
reload(mymodule)

答案 6 :(得分:1)

如果您不想使用外部库,则一种解决方案是从python 2重新为python 3创建reload方法,如下所示。在模块顶部(假设python 3.4+)中使用它。

numpy

如果您将python文件用作配置文件,并希望避免重新启动应用程序,则非常需要重新加载BTW。

答案 7 :(得分:-15)

您删除了__builtins__变量。

如何解决这个问题?不要删除__builtins __。

  

也可以有人逐步解释该错误信息的含义吗?

这意味着python无法找到“重新加载”功能。

  

重新加载(script4.py)

这是不正确的。如果您执行了“import script4”,则必须执行“reload(script4)”