PIL库获取“'NoneType'对象没有属性'items'”错误

时间:2019-06-12 10:40:43

标签: python python-3.x python-imaging-library

代码:

@Data
public class ResponsePayload {

    @JsonProperty("StatusCode")
    private String statusCode;

    @JsonAnySetter
    private Map<String, Object> properties = new HashMap<>();

    @JsonIgnore
    public Object get(String key) {
        return properties.get(key);
    }
}

错误:

#!/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))

有人可以帮助我吗?我从未使用过PIL库,但看到了一个教程, 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' 方法的工作原理:

https://www.youtube.com/watch?v=-PiR5SX4Mxo&list=PLNmsVeXQZj7onbtIXvxZTzeKGnzI6NFp_&index=8

他的代码和我的代码没有区别,我不敢相信他们在最后一个补丁中切断了.items()方法。

1 个答案:

答案 0 :(得分:1)

首先,您不应该依赖诸如_get_exif()之类的内部函数,因为它们的实现可以随时更改,并且通常不适合公众使用。 (请参阅PEP8命名约定中的_single_leading_underscore

2,您应该考虑并非所有图像都具有EXIF数据。尝试获取EXIF数据可能会None。因此,问题不是问题.items(),而是您的_get_exif()返回了None。您的代码无法处理这种情况,您始终假设_get_exif()返回dict

现在,要解决您的问题,对于Python3.x(我有Python3.6.8)和PIL(以Pillow,Pillow==6.0.0安装),Image对象现在提供了一个公共{{1} }可以使用的方法。如果图像没有EXIF数据或getexif(),则返回类型为None

<class 'PIL.Image.Exif'>