我有一个奇怪的错误:当一个脚本调用另一个调用不同脚本的脚本时,在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文件等中。这是完全错误的做事方式吗?
答案 0 :(得分:4)
您同时拥有硬件包和硬件模块。别。重命名其中一个; Python也必须检查hardware
目录。
在案例1中,hardware/__init__.py
软件包在找到hardware.py
模块之前被导入,看起来您将__init__.py
文件留空了,因此尝试访问{{1} }引发属性错误。
在第2种情况下,首先检查highestSerial
目录是否为hardware
文件,并发出警告以通知您该文件丢失;这是为了防止因初学者忘记创建该文件而导致的常见错误。
__init__.py
并导入它。
您不应使用与模块名称匹配的目录名称。只需重命名hardware.py
(并调整导入)或重命名目录。