1

我有一个奇怪的错误:当一个脚本调用一个调用不同脚本的不同脚本时,Python 2.7 中的导入 -testbench.py导入user.py导入hardware.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'

案例二

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

输出 2

  • 帮助(用户)输出:__warningregistry__ = {(Not importing directory 'hardware': missing _...
  • 调用脚本工作正常

案例之间的差异

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

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

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

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

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

4

1 回答 1

4

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

在情况 1 中,在找到模块hardware/__init__.py之前正在导入包hardware.py,并且您似乎将__init__.py文件留空,因此尝试访问highestSerial会引发属性错误。

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

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

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

于 2013-08-07T12:50:06.017 回答