【问题标题】:NameError: name 'reload' is not definedNameError:未定义名称“重新加载”
【发布时间】:2023-03-31 01:16:01
【问题描述】:

我正在使用 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

我该怎么做?

【问题讨论】:

  • 一个“简单的程序”可能不需要reload
  • 我想使用“reload(recommendations)”、“recommendations.abc()”。但它找不到推荐
  • @MindHacks 如果你还没有导入推荐,你不要重新加载它,你导入它。 import recommendations。为什么你认为你需要使用reload()
  • @geoffspear 大多数“简单程序”读取非拉丁字符的文件确实需要reload,不幸的是。
  • @GennaroTedesco:如果您正在考虑阅读的一些涉及 reload(sys) 的可怕内容,请不要这样做。只需执行with open('file', 'r', encoding='utf-8') as f: do_whatever。绝对不需要在简单程序中重新加载()模块,或者真的在 any python 程序中。

标签: python python-3.x


【解决方案1】:

你可能想要importlib.reload()

from importlib import reload

在 Python 2.x 中,这是一个 builtin,但在 3.x 中,它位于 importlib 模块中。

请注意,在解释器之外使用reload() 通常是不必要的,你想在这里做什么?

【讨论】:

  • 谢谢,它有效。但是如果我想使用reload,我必须每次都导入文件吗?
  • @MindHacks:你在说什么“文件”?
  • @MindHacks: imp 是一个模块,而不是一个文件。 (它内置在解释器核心中,不对应任何文件。)是的,要使用imp.reload,您必须导入imp,但这没什么大不了的。
  • @MindHacks 你需要在你使用reload()的地方导入imp,是的。这就是命名空间的工作原理。为什么要在交互式提示之外重新加载模块?
  • 谢谢,但叹息。为什么他们不尝试让 shell 更有用?
【解决方案2】:

@Gareth Latty 回答的更新。 imp 在 Python 3.4 中已贬值。现在你想要importlib.reload()

from importlib import reload

【讨论】:

    【解决方案3】:

    试试importlib.reload

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

    from importlib import reload
    
    reload(module_name)
    

    【讨论】:

      【解决方案4】:

      正如其他人所说,您要么需要importlib.reload(module),要么在更早的时候需要from importlib import reload。但是您可以在初始化文件中隐藏from importlib import reload。确保在您的 shell 中定义了 PYTHONSTARTUP。例如,

      export PYTHONSTARTUP=$HOME/python/startup.py
      

      如果您的 shell 是 bash,并且取决于您存储 python 文件的位置,则添加到您的~/.bash_profile 可能是一个合理的行。 (如果您按照这些说明进行操作,请在此时启动一个新的终端窗口,以便执行该行。)然后您可以放置​​该行

      from importlib import reload
      

      ~/python/startup.py 中,它会自动发生。 (再一次,如果你跟着,现在开始一个新的 python 会话。)这可能看起来有点复杂,只是为了解决这个问题,但这是你只需要做一次的事情,然后对于每个类似的问题按照“我希望 python 总是这样做”的思路,一旦你找到解决方案,你可以把它放在~/python/startup.py 中,然后忘记它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 2020-06-17
        • 2016-07-06
        • 2015-10-22
        • 2016-05-12
        • 2011-11-19
        • 1970-01-01
        相关资源
        最近更新 更多