我出现的问题是OSError: cannot identify image file <_io.BytesIO object at 0x7f02cad50780>,但是这个不能作为标题使用(找了半天原因)。
首先说一下为什么会出现OSError
操作系统不能执行指定的任务(如打开文件)时引发的,有多个子类。
我出现的原因是要处理大量的图片,然而有的图片无法打开,所以会出现OSError错误。解决办法是使用try accept解决这个异常。当然也可以直接将这个图片删除。不相信的话,可以做一下测试,这里面的00001.jpg是自己新建的一个文件
import tensorflow as tf
import io
from PIL import Image
img = tf.gfile.FastGFile('00001.jpg','rb')
encoded_jpg = img.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
height,width = image.size
附带一个python内置的异常类
Exception | 几乎所有的异常类都是从它派生而来的 |
AttributeError | 引用属性或给它赋值失败时引发 |
OSError | 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类 |
IndexError | 使用序列中不存在的索引时引发,为LookupError的子类 |
KeyError | 使用映射中不存在的键时引发,为LookupError的子类 |
NameError | 找不到名称(变量)时引发 |
SyntaxError | 代码不正确时引发 |
TypeError | 将内置操作或函数用于类型不正确的对象时引发 |
ValueError | 将内置操作或函数用于这样的对象时引发的:其类型正确但包含的值不合适 |
ZeroDivisionError | 在除法或求模运算的第二个参数为零时引发 |
如何try except解决类似的问题:
import tensorflow as tf
import io
from PIL import Image
img = tf.gfile.FastGFile('00001.jpg', 'rb')
encoded_jpg = img.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
try:
image = Image.open(encoded_jpg_io)
height, width = image.size
except (OSError, NameError):
print('OSError')
print('done')