Python 获得';非类型';对象没有属性';项目'&引用;PIL库出错
代码: 错误:Python 获得';非类型';对象没有属性';项目'&引用;PIL库出错,python,python-3.x,python-imaging-library,Python,Python 3.x,Python Imaging Library,代码: 错误: #!/usr/bin/python3 from PIL import Image, ExifTags img = Image.open("/root/Bilder/sysPics/schwarz-weiß-Karte.jpg") for i, j in img._getexif().items(): if i in ExifTags.TAGS: print(ExifTags.TAGS[i] + " - " + str(j)) 回溯(最近一次呼叫最后
#!/usr/bin/python3
from PIL import Image, ExifTags
img = Image.open("/root/Bilder/sysPics/schwarz-weiß-Karte.jpg")
for i, j in img._getexif().items():
if i in ExifTags.TAGS:
print(ExifTags.TAGS[i] + " - " + str(j))
回溯(最近一次呼叫最后一次):
文件“pythontool.py”,第7行,在
对于img._getexif().items()中的i,j:
AttributeError:“非类型”对象没有属性“项”
有人能帮我吗?我从未使用过PIL lib,但我看过一个教程,
此.items()
方法在其中起作用:
他的代码和我的代码没有区别,我不敢相信他们在上一个补丁中切断了
.items()
方法。首先,你不应该依赖内部函数,例如\u get\u exif()
,因为它们的实现可以随时更改,并且通常不用于公共用途。(参见PEP8命名约定)
第二,你应该考虑并不是所有的图像都有EXIF数据。可能尝试获取EXIF数据将
None
。因此,问题不在于.items()
方法,而在于您的\u get\u exif()
返回了None
。您的代码没有针对这种情况的处理,您总是假设\u get\u exif()
返回一个dict
现在,为了解决您的问题,对于Python3.x(我有Python3.6.8)和PIL(作为枕头安装,Pillow==6.0.0
),Image对象现在提供了一个可以使用的公共getexif()
方法。如果图像没有EXIF数据或
,则返回类型为None
从PIL导入图像,导出
img=Image.open(“sample.jpg”)
打印(目录(img))
#[…'getexif'…]
img_exif=img.getexif()
如果img_exif:
打印(类型(img_exif))
#
打印(dict(img_exif))
#{..271:'富士胶片',305:'Adobe Photoshop Lightroom 6.14(Macintosh)'
img_exif_dict=dict(img_exif)
对于键,img_exif_dict.items()中的val:
如果输入ExifTags.TAGS:
打印(ExifTags.TAGS[键]+“-”+str(val))
其他:
打印(“对不起,图像没有exif数据。”)
非常感谢,这对我帮助很大!:)@5thAveApe和我更新了我的答案,添加了您的原始代码,您可以在.items()
中循环并打印ExifTags.TAGS[key]+“-”+str(val)
。这非常有用,不知道是否可以在文档中找到它。我搜索了很多,这是我发现的唯一一个参考资料,说明枕头中有一个公共方法,可以用来取代文档中提到的“实验性”下划线方法。@Karr是的,我在写这个答案时也在寻找关于它的文档,但我在地图上找不到它。我从source()找到了它,然后用dir
验证了它。
Traceback (most recent call last):
File "python-tool.py", line 7, in <module>
for i, j in img._getexif().items():
AttributeError: 'NoneType' object has no attribute 'items'