Python IndexError只发生在osx上,而不是linux上

时间:2015-05-25 09:41:20

标签: python linux macos

我正在解析一个RGB .jpg文件,它在linux中解析得很好,但在mac osx中却没有。两者都是版本2.7.9

以下是代码:

import numpy
import Image
from StringIO import StringIO
import urllib

def main():

    # process terrain input
    terrain_image = numpy.asarray(Image.open(StringIO(urllib.urlopen("http://i.imgur.com/IIv3E1K.jpg").read())))

    # swap around axes and drop two of the three layers (they're all identical)
    terrain_image = numpy.swapaxes(terrain_image, 2, 1)
    terrain_image = numpy.swapaxes(terrain_image, 0, 1)
    terrain_image = terrain_image[0]

    print "Terrain Image Parsed!"

if __name__ == "__main__":
    main()

在Linux中,我得到了这个:

Terrain Image Parsed!

在osx中​​:

Traceback (most recent call last):
  File "test.py", line 19, in <module>
    main()
  File "test.py", line 14, in main
    terrain_image = terrain_image[0]
IndexError: too many indices for array

为什么会出现这种差异?

1 个答案:

答案 0 :(得分:0)

这可能是一个糟糕的猜测 - 首先要做的是将调用“Image.open(...)”放在一个单独的行中,然后打印,调试或以其他方式内省生成的对象 看看你是否真的有一个Image。对数组对象执行相同的操作。

如果你得到了一个合适的图像(以及数组是否看起来很奇怪),我猜测它们的开始 - 当前现代形式的打开图像,正在使用from PIL import Image - 作为Pillow,维护的叉子Python-imaging -library不赞成使用简单的import Imageimport Image行中的错误为no表明您使用的是过时的Python-Imaging-Library。我建议从您的项目中卸载“PIL”(或Python-PIL) - 如果您(正如您所愿)使用Python包隔离机制(例如virtualenv)并安装直接替换“枕头”。 (当然,将所述行更改为from PIL import Image

如果您使用的是系统库,请检查您的Linux发行版是否有Pillow包(而不是PIL)并安装它。否则,您将不得不采用virtualenv或类似机制,您可以在不干扰系统剩余的情况下提供枕头。 (删除包管理器提供的Pillow在任何Linux发行版中用于系统范围的枕头 - 通过PIP安装的Python端 - 可能是灾难性的,因为系统将删除所有依赖于PIL的包,因为它不会“看到”它)

再次,这可能不是错误原因。