【问题标题】:python reload module for beginner. importlib.reload doesn't seem to work初学者的python重新加载模块。 importlib.reload 似乎不起作用
【发布时间】:2018-12-19 16:26:48
【问题描述】:

我有一个名为 skdb 的文件和一个名为 skmysqldb 的类。我正在尝试强制重新加载。

我尝试重新加载“skdb”、“skdb.skmysqldb”、“skmysqldb”,但它们似乎都不起作用。

>>> from skdb import skmysqldb

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

>>> importlib.reload(skmysqldb)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\importlib\__init__.py", line 139, in reload
    raise TypeError("reload() argument must be a module")
TypeError: reload() argument must be a module

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

【问题讨论】:

  • 嘿@Nite 你能添加你得到错误的代码吗?
  • skmysqldb 是什么,是函数吗?如果是这样,您将无法重新加载它。

标签: python module python-import reload


【解决方案1】:

当您使用from &lt;module&gt; import &lt;obj&gt; 语法导入某些对象时,如

from skdb import skmysqldb

模块本身并未添加到当前命名空间,因此当您尝试执行reload(skdb) 时会得到NameError

改为尝试:

import skdb
importlib.reload(skdb)

使用重新加载时要小心。如果您重新加载的模块导入了其他模块,则这些模块不会以递归方式重新加载,因此根据确切的代码,您可能会处于相当损坏的状态,最好重新启动整个解释器。 p>

【讨论】:

  • 如果模块 skmysqldb 是一个自定义模块并且它与您导入它的位置不同怎么办?比如from server.settings import settings importlib.reload(????)我做不出来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2016-02-25
  • 2015-07-08
  • 2018-06-14
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多