python 运行 Image.open 提示type object 'Image' has no attribute 'open'

直接在shell里运行不会保存,可一旦运行程序,就会提示Exception in Tkinter callbackTraceback (most recent call last): File "D:\anaconda\lib\tkinter\__init__.py", line 1699, in __call__ return self.func(*args) File "C:\Users\DELL\Desktop\11111111111.py", line 13, in openimage im=Image.open(path)AttributeError: type object 'Image' has no attribute 'open'

原因:因为第一行的from PIL import Image与第二行tkinter import *冲突,tkinter中也含有Image类,所以你使用的是tkinter.Image。

解决办法:把Image.open替换为PIL.Image.open,并将第一行的Image删除,因为与最后的import PIL.Image重复了。

Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。

然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。

这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。

扩展资料:

Python的优点

1、简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

2、易学:Python极其容易上手,因为Python有极其简单的说明文档 。

3、速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。

4、免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

5、高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

6、解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。



温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-27

原因:

因为第一行的from PIL import Image,与第二行tkinter import *冲突,tkinter中也含有Image类,所以你使用的是tkinter.Image。

修改:

把Image.open替换为PIL.Image.open,并将第一行的Image删除,因为与最后的import PIL.Image重复了。

建议:

在导入模块的时候,不建议import *的方式,因为很多模块没有用到,会导致命名冲突,所以应该是用到哪一个,导入哪一个。

希望以上回答,可以帮到你。

本回答被提问者和网友采纳
第2个回答  2019-09-24
把包重命名一下可以解决冲突
from PIL import Image as imaget
相似回答