开发者

problems importing python module

开发者 https://www.devze.com 2023-03-11 09:59 出处:网络
I\'m trying to use python\'s bitstring module in a script and am getting an import error.This error does not happen when running from interactive mode.

I'm trying to use python's bitstring module in a script and am getting an import error. This error does not happen when running from interactive mode.

Here's the code:

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

When run like this:

python test.py

I get this:

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

However, when I do this:

$ 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

It works just fine! It's the same interpreter bein开发者_JAVA百科g run by the same user. Any pointers?


I predict you have created a bitstring.py in your current directory.


The problem is caused by a bitstring.py file in sys.path of test.py, but not in that of the interactive python shell. Most likely, there's a bitstring.py file in the directory test.py is in, and you started your shell from another working directory.

Since python traverses sys.path from front to end, modules in the current directory - even if accidentally created - overshadow those in system library directories.


Google App Engine actually had a similar issue at one point. The easiest solution there was simply comment the offending line or use try...except. Obviously that won't work here.

In that case, the problem was initialization order. A half second later a similar line of code was called again with success. Their solution? refactor. :-(

The best I've seen is a dynamic lookup of the class: bitstring.__dict__.get("BitArray") or getattr(bitstring, "BitArray");. It isn't ideal (and I believe I've even seen those return null), but hopefully it can get you somewhere.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号