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

我想重新加载一个模块,我已经在Python 3中导入。我知道你只需要导入一次,再次执行import命令将不会做任何事情。

执行reload(foo)是给这个错误:

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

错误是什么意思?

reload是Python 2中的一个内置函数,但不是Python 3中的,因此您所看到的错误是预期的。

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

  • Python 3.4和更高版本的importlib.reload
  • imp.reload for Python 3.0 to 3.3(自Python 3.4开始弃用,以支持importlib
 import imp imp.reload(script4) 

对于> = Python3.4:

 import importlib importlib.reload(module) 

对于<= Python3.3:

 import imp imp.reload(module) 

对于Python2.x:

使用内置的reload()函数。

 reload(module) 

为了扩展以前的书面答案,如果你想要一个可以在Python版本2和3上使用的解决scheme,你可以使用下面的代码:

 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 

我build议使用下面的代码片段,因为它可以在所有python版本中工作(需要six ):

 from six.moves import reload_module reload_module(module) 

你删除了__builtins__variables。

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

也可以有人解释一步一步的错误信息是什么意思?

这意味着python找不到函数“reload”。

重新加载(script4.py)

这是不正确的。 如果你做“导入script4”,那么你必须做“重载(script4)”