首页 >后端开发 >Python教程 >为什么 Python 会抛出'ValueError:尝试相对导入超出顶级包”错误?

为什么 Python 会抛出'ValueError:尝试相对导入超出顶级包”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-21 11:26:10605浏览

Why Does Python Throw a

相对导入中超出顶级包错误

当尝试超出顶级包的相对导入时,Python 会抛出“ValueError: attempts”相对导入超出顶级包”错误。为了理解原因,让我们分析一下提供的包结构:

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py

在 test.py 中,来自 ..A import foo 的行尝试从 A 子包导入,该子包无法从test_A 子包。 Python 要求相对导入保留在当前包的范围内。

从包文件夹中执行 python -m test_A.test 时,Python 将 test_A.test 解释为当前包中的模块。但是,它不再将 package 视为包,因为 -m 标志直接调用该模块。这会导致相对导入尝试超出顶级包(package),从而触发错误。

相反,当从父文件夹执行 python -m package.test_A.test 时,Python 会识别 package作为一个包并允许在其范围内进行相对导入。这成功地解析了 from ..A import foo,因为 A 子包可以在 package 包内访问。

此错误凸显了确保相对导入保留在当前包范围内的重要性。当直接使用 -m 标志调用模块时,Python 不会将当前工作目录视为一个包,这可能会导致像遇到的错误。

以上是为什么 Python 会抛出'ValueError:尝试相对导入超出顶级包”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn