适合初学者的 python 重新加载模块。importlib.reload 似乎不起作用

Nit*_*ite 4 python module reload python-import

我有一个名为 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
Run Code Online (Sandbox Code Playgroud)

Igu*_*aut 9

from <module> import <obj>当您使用如下语法导入某些对象时

from skdb import skmysqldb
Run Code Online (Sandbox Code Playgroud)

模块本身没有添加到当前命名空间中,因此NameError当您尝试执行reload(skdb).

相反尝试:

import skdb
importlib.reload(skdb)
Run Code Online (Sandbox Code Playgroud)

使用重新加载时要小心。如果您重新加载的模块导入其他模块,这些模块不会递归地重新加载,因此根据具体的代码,您可能会陷入相当损坏的状态,最好重新启动整个解释器。