迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

修复 Python 中 ImportError: Cannot Import Name 错误

作者:迹忆客 最近更新:2023/07/05 浏览次数:

通过这个解释,我们将了解为什么会收到 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 模块的一部分。

Python ImportError 无法导入名称示例

让我们重点关注 demo2 模块。

我们可以看到 demo2_func1() 函数打印一些字符串,然后加载我们从 demo1 模块导入的 demo1_func1() 函数。 当 demo1_func1() 调用时,它将打印一些字符串。

在下一行中,在 demo1_func1() 函数中,我们调用 demo2_func2() 方法,因此我们可以看到 demo2_func2() 方法也是 demo1 模块的一部分。 我们可以看到这两个模块是相互依赖的。

在这种情况下,当我们使用像 from demo1 import demo1_func1from 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 应用程序时,会发生此错误。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中错误 File<Stdin>, Line 1, in <Module>

发布时间:2023/07/05 浏览次数:134 分类:Python

在本文中,我们将讨论人们面临的最常见的语法错误,即文件“”,第 1 行, 错误。 让我们看看为什么会出现这个错误以及如何在 Python 中解决它。Python 错误 File<Stdin>, Line 1, in <Module&

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便