导入Python模块时的问题
我在用Python的bitstring
模块写脚本时遇到了导入错误。不过在交互模式下运行时,这个错误就不会出现。
这是我的代码:
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
一切都正常!同样的解释器,同样的用户。有没有什么建议?
3 个回答
0
Google App Engine 曾经遇到过一个类似的问题。当时最简单的解决办法就是把出问题的那行代码注释掉,或者使用 try...except 语句。显然,这种方法在这里不适用。
在那个情况下,问题出在初始化的顺序上。过了半秒钟,类似的代码又被成功调用了一次。他们的解决办法是什么呢?重构代码。:-(
我见过的最好的方法是动态查找类:bitstring.__dict__.get("BitArray")
或者 getattr(bitstring, "BitArray");
。虽然这不是最理想的解决方案(我相信我也见过这些返回空值),但希望这能帮到你。
1
这个问题是因为在 test.py
的 sys.path
中有一个 bitstring.py
文件,但在交互式的 Python 终端中却没有。很可能是 test.py
所在的文件夹里有一个 bitstring.py
文件,而你是从另一个工作目录启动了你的终端。
因为 Python 会从前到后查找 sys.path
中的模块,所以当前目录里的模块——即使是意外创建的——会覆盖掉系统库目录里的模块。
7
我猜想你在当前目录下创建了一个叫做 bitstring.py 的文件。