NameError:名称“ reload”未定义


79

我正在使用python 3.2.2。当我编写一个简单的程序时,我遇到了问题。

>>> reload(recommendations)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    reload(recommendations)
NameError: name 'reload' is not defined

我该怎么办?


9
可能不需要“简单程序” reload
Wooble

我想使用“ reload(recommendations)”,“ recommendations.abc()”。但是它找不到建议
MindHacks 2012年

1
@MindHacks如果尚未导入建议,则不重新加载它,而是将其导入。import recommendations。为什么您认为需要使用reload()
Gareth Latty

@geoffspear不幸的是,大多数带有非拉丁字符的“简单程序”读取文件确实需要reload
gentil '17

@GennaroTedesco:如果您正在考虑阅读一些涉及reload(sys)的可怕内容,请不要这样做。做吧with open('file', 'r', encoding='utf-8') as f: do_whatever。绝对不需要在简单程序中或在任何python程序中都真正使用reload()模块。
Wooble

Answers:


156

你可能想要importlib.reload()

from importlib import reload

在Python 2.x中,这是一个内置函数,但在3.x中,它在importlib模块中。

请注意,reload()通常不需要在解释器外部使用,您在这里尝试做什么?


谢谢,它有效。但是,如果我想使用重新加载,我每次都必须导入文件吗?
MindHacks 2012年

@MindHacks:您在说什么“文件”?
Sven Marnach 2012年

@MindHacks:imp是一个模块,而不是文件。(它内置在解释器核心中,不与任何文件对应。)是的,要使用imp.reload它必须导入imp,但这没什么大不了的。
Sven Marnach 2012年

@MindHacks您需要导入imp使用的位置reload(),是的。这就是命名空间的工作原理。您为什么仍要在交互式提示之外重新加载模块?
Gareth Latty

3
谢谢,但感叹。他们为什么不尝试使外壳更有用?
Thomas Ahle 2014年


11

尝试importlib.reload

重新加载先前导入的模块。该参数必须是模块对象,因此它必须已经成功导入。如果您已使用外部编辑器编辑了模块源文件,并且想在不离开Python解释器的情况下尝试新版本,则这将非常有用。

from importlib import reload

reload(module_name)

0

正如其他人所说的,您需要importlib.reload(module)或者在某个时候需要from importlib import reload。但是您可以将其隐藏from importlib import reload在初始化文件中。确保PYTHONSTARTUP在您的外壳中定义了它。例如,

export PYTHONSTARTUP=$HOME/python/startup.py

~/.bash_profile如果您的外壳是bash,并且可能取决于您存储python文件的位置,则可能在您的代码中添加一条合理的行。(如果遵循这些说明,请在此时启动一个新的终端窗口,以便执行该行。)然后,您可以将该行放入

from importlib import reload

~/python/startup.py它会自动发生。(同样,如果您继续进行,请在此时开始一个新的python会话。)这可能看起来有点复杂,只是为了解决这个问题,但是您只需要做一次,然后对每个类似的问题进行处理就可以了。遵循“我希望python总是能做到这一点”的思路,一旦找到解决方案,您就可以放进去,~/python/startup.py而不必理会。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.