gpt4 book ai didi

python - 如何在 except 中捕获 PIL.UnidentifiedImageError

转载 作者:行者123 更新时间:2023-12-03 08:17:58 26 4
gpt4 key购买 nike

我有一个包含数十万张图片的巨大 Zip 文件。我正在尝试读取内存中的这些图像并将像素数据提取到数组中。这个想法是在模型构建中使用展平的图像阵列。 PIL.Image 无法读取一些文件,并且在这种情况下会引发 UnidenfitiedImageError。我想在 try-except 中捕捉到这一点,并将所有问题图像的路径放入一个单独的列表中。我是 python 和编程的新手。我尝试使用 try-except 子句,但它不起作用。请帮忙:

with ZipFile('/XXXXX/YYYYY/ZZZZZ/AI_ML/Project2/words.zip') as myzip:
contents = myzip.namelist()
for i in range(0,len(contents)-1):
text = str(contents[i])
if '.png' in text:
if 'MACOSX' not in text:
file_paths.append(contents[i])
for path in file_paths:
img = myzip.read(path)

try:
img_data = Image.open(BytesIO(img))
except UnidentifiedImageError:
problem_files.append(path)

img_data = img_data.convert('L') # 2
image_as_array = np.array(img_data, np.uint8) # 3
img_list.append(image_as_array)

这给出了一个错误 -

UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f63ef5154c0>

During handling of the above exception, another exception occurred:

NameError Traceback (most recent call last)
<ipython-input-8-23281c9e5d49> in <module>()
16 try:
17 img_data = Image.open(BytesIO(img))
---> 18 except UnidentifiedImageError:
19 problem_files.append(path)
20 img_data = img_data.convert('L') # 2

NameError: name 'UnidentifiedImageError' is not defined

最佳答案

你得到一个 NameError 因为 UnidentifiedImageError 没有在你的命名空间中定义。通过检查 the documenation ,可以看到在PIL.UnidentifiedImageError中可以访问异常,所以可以插入

from PIL import UnidentifiedImageError

在代码的开头,或者只是import PIL,和

try:
img_data = Image.open(BytesIO(img))
except PIL.UnidentifiedImageError:
problem_files.append(path)

最后,因为UnidentifiedImageError继承自OSError,你也可以写except OSError:,虽然最好是窄而不是宽指定要捕获的异常,这样其他问题就不会被忽视,例如打开文件引发的其他异常。

关于python - 如何在 except 中捕获 PIL.UnidentifiedImageError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63656089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com