gpt4 book ai didi

Python 2.7 奇怪的导入警告

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:54 27 4
gpt4 key购买 nike

我有一个奇怪的错误 re: imports in Python 2.7 when one script calls a different script that calls a different script - testbench.py​​ imports user.py imports 硬件.py

  • testbench.py​​ 运行硬件测试平台
  • user.py 接受用户输入(特别是要测试的硬件的序列号)
  • hardware.py 有一些关于有效#SN 的信息(在整数 highestSerial 中)
  • user.py 使用hardware.highestSerial 变量

在这两种情况下,工作流程都是这样的:

>>>python
>>>import user
>>>help(user)
>>>exit()
>>>python testbench.py

案例 1

\\testbench.py
\\user.py
\\hardware.py
\\__init__.py
\\hardware\\__init__.py
\\hardware\\hardwareList.txt

输出 1

  • 没有来自帮助(用户)的警告
  • 调用脚本输出:AttributeError: 'module' object has no attribute 'highestSerial'

案例 2

\\testbench.py
\\user.py
\\hardware.py
\\__init__.py
\\hardware\\hardwareList.txt

输出 2

  • 帮助(用户)输出:__warningregistry__ = {(未导入目录“硬件”:缺少 _...
  • 调用脚本工作正常

案例之间的区别

在第一种情况下,有一个包含__init__.py 的硬件文件夹 - 没有警告,但代码中断(因为我要查找的属性不在文件夹)

在第二种情况下,没有硬件文件夹,所以我得到了一个Not importing directory 警告,但代码工作正常。

现在显然我可以重命名一些东西,但你们知道幕后发生了什么吗?

编辑 当我将 hardware.py 放入\hardware\时,事情变得非常疯狂,但我们会暂时忘记那个场景

EDIT 2 我一直想制作一个 hardware.py 脚本来访问\hardware\文件夹中的所有内容 - 序列号列表、硬件类型等,没有一个在 python 中,而是在 .txt 文件、.csv 文件等中。这是一种完全错误的做事方式吗?

最佳答案

您同时拥有硬件 和硬件模块。不。重命名一个或另一个; Python 也必须检查 hardware 目录

在情况 1 中,hardware/__init__.py 包在找到 hardware.py 模块之前被导入,看起来你离开了 __init__ .py 文件为空,因此尝试访问 highestSerial 会引发属性错误。

在情况 2 中,首先检查 hardware 目录中的 __init__.py 文件,并发出警告让您知道该文件丢失;这是为了防止初学者 Python 开发人员忘记创建该文件而犯的常见错误。

Python 然后会找到 hardware.py 并将其导入。

您不应使用与模块名称相匹配的目录名称。只需重命名 hardware.py(并调整您的导入)或重命名目录。

关于Python 2.7 奇怪的导入警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com