导入Python模块时的问题

8 投票
3 回答
7191 浏览
提问于 2025-04-16 18:55

我在用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.pysys.path 中有一个 bitstring.py 文件,但在交互式的 Python 终端中却没有。很可能是 test.py 所在的文件夹里有一个 bitstring.py 文件,而你是从另一个工作目录启动了你的终端。

因为 Python 会从前到后查找 sys.path 中的模块,所以当前目录里的模块——即使是意外创建的——会覆盖掉系统库目录里的模块。

7

我猜想你在当前目录下创建了一个叫做 bitstring.py 的文件。

撰写回答