2013-08-07 45 views
1

我有一個奇怪的錯誤重:在Python 2.7的進口,當一個腳本調用不同的腳本調用不同的腳本 - testbench.py進口user.py進口hardware.py的Python 2.7奇怪的進口預警

  • testbench.py運行的硬件測試平臺
  • user.py需要用戶輸入(即,測試硬件的序列號)
  • hardware.py具有大約有效#SNs一些信息報告(在整數highestSerial
  • user.py使用hardware.highestSerial可變

在兩種情況下,工作流是這樣的:

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

CASE 1

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

輸出1

  • 從幫助沒有警告(用戶)
  • 調用腳本輸出:AttributeError: 'module' object has no attribute 'highestSerial'

CASE 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 \硬件裏面\但我們會忘記的場景暫時

EDIT 2我的想法一直是我想要做一個硬件。 py腳本來訪問\ hardware \文件夾中的所有東西 - 序列號列表,硬件類型等,其中沒有一個是在python中,而是在.txt文件中,.csv文件等。這是一個完全錯誤的方式來做事情?

回答

4

你有一個硬件和一個硬件模塊。別。重命名一個或另一個; Python也必須檢查hardware目錄

在案例1中,找到了hardware.py模塊之前hardware/__init__.py包進口的,而且似乎你離開__init__.py文件空的,所以試圖訪問highestSerial引發屬性錯誤。

在情況2中,首先檢查hardware目錄中的__init__.py文件,並提示警告以通知您該文件丟失;這是爲了防止初始化Python開發人員忘記創建該文件而導致的常見錯誤。

然後Python找到hardware.py並導入。

您不應使用與模塊名稱匹配的目錄名稱。只需重命名hardware.py(並調整您的導入)或重命名目錄。

+0

當我這樣做時,我收到警告。爲什麼? – medivh

+0

@medivh:因爲'import hardware'意思是Python *有'*'來考慮'hardware'目錄,所以需要'__init __。py'來警告你。你也有'hardware.py' **這個事實**不會改變這種行爲。 –

+0

對我的第二次編輯有任何評論? – medivh