Python 2.7奇怪的导入警告

时间:2013-08-07 12:47:29

标签: python python-2.7 python-import

我有一个奇怪的错误:当一个脚本调用另一个调用不同脚本的脚本时,在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'

案例2

\\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文件等中。这是完全错误的做事方式吗?

1 个答案:

答案 0 :(得分:4)

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

在案例1中,hardware/__init__.py软件包在找到hardware.py模块之前被导入,看起来您将__init__.py文件留空了,因此尝试访问{{1} }引发属性错误。

在第2种情况下,首先检查highestSerial目录是否为hardware文件,并发出警告以通知您该文件丢失;这是为了防止因初学者忘记创建该文件而导致的常见错误。

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

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