修复 Python 中 ImportError: Cannot Import Name 错误
通过这个解释,我们将了解为什么会收到 ImportError: Cannot import name 错误。 我们还将学习如何在 Python 中修复此类错误。
Python 中 ImportError: cannot import name 错误的原因
我们可以使用多种方法来修复此错误,但在深入研究修复此错误的方法之前,让我们尝试了解为什么会发生此错误以及 ImportError 通常何时发生。
如果代码中的 import 语句在成功导入模块时遇到困难,则会出现 Python 中的 ImportError。
出现此类问题的原因通常是外部库安装错误或您尝试导入的模块路径无效。
提出问题:ImportError:cannot import name (xyz) 什么时候发生? 当您尝试导入的类处于循环依赖关系中时,通常会发生这种导入错误。
这意味着什么? 什么是循环依赖? 当两个模块尝试同时导入彼此以使它们相互依赖时,通常会发生循环依赖。
为了进一步解释这一点,我们需要看一个示例来了解此错误如何以及何时发生。 假设我们有几个模块:demo1.py 和 demo2.py。
在进入 import 语句之前,让我们先看看这些模块的内容,然后再看看 import
语句。
正如我们所看到的,demo2 模块有几个函数:demo2_func1()
和 demo2_func2()
。 同样,demo1 模块有一个名为 demo1_func1()
的函数。
正如我们所看到的,在 demo2 模块中,我们从模块 demo1 导入 demo1_func1。 同样,在 demo1 模块中,我们尝试导入名为 demo2_func2()
的函数,该函数是 demo2 模块的一部分。
让我们重点关注 demo2 模块。
我们可以看到 demo2_func1()
函数打印一些字符串,然后加载我们从 demo1 模块导入的 demo1_func1()
函数。 当 demo1_func1()
调用时,它将打印一些字符串。
在下一行中,在 demo1_func1()
函数中,我们调用 demo2_func2()
方法,因此我们可以看到 demo2_func2()
方法也是 demo1 模块的一部分。 我们可以看到这两个模块是相互依赖的。
在这种情况下,当我们使用像 from demo1 import demo1_func1
和 from demo2 import demo2_func2
这样的语句时,就会出现循环依赖。
如果我们执行 demo2 模块,那么预期的输出应该是这样的,因为最初调用 demo2_func1()
,然后我们继续执行 demo1_func1()
函数,依此类推。 执行后,我们有一个 ImportError 提示(cannot import name 'demo1_func1')。
ImportError: cannot import name 'demo1_func1' from partially initialized module 'demo1' (most likely
due to a circular import)
发生这种情况主要是因为我们试图从另一个模块访问一个模块的内容,反之亦然。 如果我们查看 demo2.py 模块,我们会尝试在 demo1_func1 初始化之前从 demo1 导入 demo1_func1 函数; 那是程序开始的时候。
Python 仍在初始化 demo1 模块的内容,但我们没有给 Python 足够的时间来初始化 demo1_func1 函数。 我们直接调用它,这就是我们遇到这个 ImportError 的原因。
修复Python中的 ImportError: cannot import name 错误
现在我们将看看如何修复此错误。 我们可以通过两种方式修复这个错误,但我们将使用最简单的方法:避免循环依赖,Python 可以自己完成。
要解决该问题,我们必须对代码进行某些更改。
我们必须修改 import 语句,而不是导入模块的内容,而是导入两个文件中的整个模块。
demo1.py文件的源代码:
import demo2
def demo1_func1():
print('demo1_func1')
demo2.demo2_func2()
The code of the demo2.py file:
import demo1
def demo2_func1():
print('demo2_func1')
demo1.demo1_func1()
def demo2_func2():
print('demo2_func2')
if __name__=='__main__':
demo2_func1()
输出:
demo2_func1
demo1_func1
demo2_func2
大多数情况下,当我们使用蓝图方法开发 Flask 应用程序时,会发生此错误。
相关文章
修复 Python 中错误 AttributeError: 'module' Object Has No Attribute 'SSL_ST_
发布时间:2023/07/05 浏览次数:171 分类:Python
-
在 Python 中使用 SSL 模块时,会引发 AttributeError: 'module' object has no attribute 'SSL_ST_INIT' 错误,因为 SSL 模块在 Python 标准库中不可用。要解决此问题,您必须安装 openssl-devel 软件包。
修复 python 中 AttributeError: 'generator' Object Has No Attribute 'next'
发布时间:2023/07/05 浏览次数:72 分类:Python
-
本篇文章将介绍修复 Python 中的 AttributeError: 'generator' object has no attribute 'next'。修复 Python 中的 AttributeError: 'generator' object has no attribute 'next' 错误
Python 中错误 File<Stdin>, Line 1, in <Module>
发布时间:2023/07/05 浏览次数:134 分类:Python
-
在本文中,我们将讨论人们面临的最常见的语法错误,即文件“”,第 1 行, 错误。 让我们看看为什么会出现这个错误以及如何在 Python 中解决它。Python 错误 File<Stdin>, Line 1, in <Module&
Python 中错误 AttributeError: Module Enum Has No Attribute Intflag
发布时间:2023/07/05 浏览次数:65 分类:Python
-
本篇文章将介绍修复 Python 中的 AttributeError: module 'enum' has no attribute 'IntFlag'。卸载 enum34 包以修复 Python 中的 AttributeError: module 'enum' has no attribute 'IntFlag' 错误
python 中解决 Graphviz Executables Are Not Found 错误
发布时间:2023/07/04 浏览次数:87 分类:Python
-
本文介绍了如何解决运行 Python 脚本时未找到 Graphviz 可执行文件的错误。安装Graphviz解决Python中 Graphviz executables are not found 错误
解决 Python中的 Reduce Is Not Defined 问题
发布时间:2023/07/04 浏览次数:161 分类:Python
-
本文将讨论如何解决 Python 代码中的“reduce 未定义”错误。python 中使用functools解决NameError: name 'reduce' is not Defined
python 中解决 Raise JSONDecodeError(Expecting Value, S, err.value) From None
发布时间:2023/07/04 浏览次数:52 分类:Python
-
在 json 库中,有一个方法,loads(),它返回 JSONDecodeError 错误。 在本文中,我们将讨论如何解决此类错误并进行适当的处理。从 Python 中使用 try 的 None 中解决 raise JSONDecodeError("Expecting value", s,
解决 Python中 Attempted Relative Import With No Known Parent Package 错误
发布时间:2023/07/04 浏览次数:134 分类:Python
-
对导入系统的充分了解足以防止此类错误,包括 ImportError: attemptsrelative import with noknownparent package。 通过错误消息可以轻松排除问题的根源。
Python 错误 TypeError: Unsupported Operand Type(s) for +: 'NoneType' and 'Int'
发布时间:2023/07/04 浏览次数:115 分类:Python
-
在 Python 中,当您将整数值与空值相加时,会出现 TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 。 我们将在本文中讨论 Python 错误以及如何解决它。