重新加载模块时出现NameError: name 'reload' is not defined的错误。

16 浏览
0 Comments

重新加载模块时出现NameError: name 'reload' is not defined的错误。

我正在尝试重新加载一个我已经在Python 3中导入的模块。我知道只需要导入一次,再次执行import命令不会有任何作用。\n执行reload(foo)会出现以下错误:\nTraceback (most recent call last):\n File \"(stdin)\", line 1, in (module)\n ...\nNameError: name \'reload\' is not defined\n\n这个错误是什么意思?

0
0 Comments

在Python中,使用reload()函数可以重新加载已经导入的模块。然而,当尝试使用reload()函数重新加载模块时,可能会遇到NameError: name 'reload' is not defined的错误。

这个错误的出现是因为在Python 3.4版本之后,reload()函数已经被弃用,取而代之的是importlib模块中的reload()函数。因此,当我们在Python 3.4及更高版本中使用reload()函数时,会出现NameError: name 'reload' is not defined的错误。

要解决这个问题,我们需要使用importlib模块中的reload()函数来重新加载模块。下面是解决方法的示例代码:

import importlib
importlib.reload(script4)

通过使用importlib.reload()函数,我们可以成功重新加载模块,而不会出现NameError: name 'reload' is not defined的错误。

总结起来,当尝试使用reload()函数重新加载模块时,如果出现NameError: name 'reload' is not defined的错误,我们需要使用importlib.reload()函数来代替reload()函数。

0
0 Comments

当在Python中重新加载模块时出现NameError: name 'reload' is not defined错误,这是因为Python 3.4及以上版本已经将reload()函数从内置模块中移除。因此,为了解决这个问题,我们需要根据Python版本使用不同的方法来重新加载模块。

对于Python 3.4及以上版本,我们可以使用importlib模块中的reload()函数来重新加载模块。可以使用以下代码来重新加载模块:

import importlib
importlib.reload(module)

对于Python 3.3及以下版本,我们可以使用imp模块中的reload()函数来重新加载模块。可以使用以下代码来重新加载模块:

import imp
imp.reload(module)

对于Python 2.x版本,我们可以直接使用内置的reload()函数来重新加载模块。可以使用以下代码来重新加载模块:

reload(module)

在以上的解决方法中,前两种方法适用于重新加载第三方模块,例如重新加载matplotlib.pyplot模块。然而,如果我们尝试重新加载自己编写并先前导入的脚本时,这两种方法可能不起作用。会出现"ModuleNotFoundError: spec not found for the module 'script'"错误。这可能是因为Python无法找到脚本的模块规范。

当出现NameError: name 'reload' is not defined错误时,我们可以根据Python版本选择不同的方法来重新加载模块。如果我们尝试重新加载自己编写的脚本时出现错误,可能是因为Python无法找到脚本的模块规范。

0
0 Comments

在Python 2中,`reload`是内置函数,但在Python 3中不再支持,因此你看到的错误是预期的。

如果你确实需要在Python 3中重新加载一个模块,你应该使用以下方法之一:

- 对于Python 3.4及以上版本,可以使用`importlib.reload`。

- 对于Python 3.0到3.3版本,可以使用`imp.reload`(从Python 3.4开始已被弃用,推荐使用`importlib`)。

这个答案表明在Python 3中重新加载模块是不好的。背后的思想是什么?

重新加载总是有问题的。重新加载会更新模块变量,但不会删除旧的变量,因此如果你重命名某个变量,旧的变量仍然存在。如果你更改类定义,现有对象仍将具有旧类型。最后,一些模块在导入时运行代码,这些代码不会设计为运行两次。因此,最好避免重新加载,但经常非常方便。

我认为重新加载经常是有问题的,但并不总是如此。可以肯定的是,将`reload`写入脚本的有效用例非常罕见,使用这种黑暗的技巧的人不太可能阅读这个注释。然而,如果你正在开发一个模块并使用IPython控制台进行交互式测试,那么在这种工作流程中使用`reload`可能很方便。不过,要注意导入时的副作用。我建议避免重新加载其他人的模块,重新加载自己的模块在设计时是有意义的。

我在我的工作中使用Jupyter笔记本,为了保持整洁,我将应该需要最少修改的工作放入可导入的包中。然而,这些东西有时需要修改,重新加载绝对是正确的做法,因为我的笔记本内核中保存了计算,而这些计算可能需要一整天的时间。

重新加载对于活跃开发具有耗时调用(例如数据库函数)的库至关重要。然而,重新加载模块时你可能会遇到的一个主要问题是,带有装饰器的函数往往无法正确重新加载。

这种方法可能不会覆盖其他模块对重新加载的模块的引用。可以参考stackoverflow.com/a/61617169/2642356中的解决方案。

0