2011-06-03 99 views
6

我想在腳本中使用python的bitstring模塊,並且得到一個導入錯誤。從交互模式運行時不會發生此錯誤。導入python模塊的問題

下面的代碼:

import bitstring 
b = bitstring.BitArray(bin='001001111') 

在運行的時候是這樣的:

python test.py 

我得到這個:

AttributeError: 'module' object has no attribute 'BitArray' 

然而,當我這樣做:

$ python 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import bitstring 
>>> b = bitstring.BitArray(bin='001001111') 
>>> print b 
0b001001111 

它工作得很好!這是由同一用戶運行的相同解釋器。任何指針?

+7

打印出來'bitsrting從非交互模式在腳本中.__ file__'並確保它指向正確的文件 – inspectorG4dget 2011-06-03 19:41:00

+4

這是否發生在同一個目錄? – 6502 2011-06-03 19:41:17

+9

我預測你在當前目錄中創建了bitstring.py – 2011-06-03 19:47:40

回答

1

該問題是由於的sys.path中的bitstring.py文件引起的,但不在交互式python shell中。很可能,目錄test.py中有一個bitstring.py文件,並且您從另一個工作目錄啓動了您的shell。

由於python從前到後遍歷sys.path,當前目錄中的模塊(即使意外創建)掩蓋了系統庫目錄中的模塊。

0

谷歌應用程序引擎實際上有一個similar issue在一個點上。最簡單的解決方案只是評論違規行或使用try ... except。顯然,這不會在這裏工作。

在這種情況下,問題是初始化順序。半秒鐘後,類似的代碼行又被稱爲成功。他們的方案?重構。 :-(

我見過的最好的是對該類的動態查找:bitstring.__dict__.get("BitArray")getattr(bitstring, "BitArray");。它不是理想的(我相信我甚至看到了那些返回null),但希望它可以讓你某處。

7

我預測你已經創建了您的當前目錄中的bitstring.py。