使用图片时出现ValueError == None

时间:2018-08-20 04:34:09

标签: python numpy opencv


我正在为程序创建故障保护,因此无论何时没有图像或image = None都将显示一条消息,并终止程序。 我正在使用以下代码作为执行此操作的方法:

src_img = cv2.imread('/home/nazar/Downloads/img_4.png', 1)
if src_img == None:
    exit('No such file or direcory!')
copy = src_img.copy()

这在没有图像的情况下有效,但是当有图像时,会给出错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我尝试遵循错误的建议并尝试了if src_img.all == None:,现在当没有图像时会显示错误:

AttributeError: 'NoneType' object has no attribute 'all'

有没有一种方法可以在不获取这些错误消息的情况下实际执行此操作,并且在给出图像或没有给出图像的情况下也可以工作。

1 个答案:

答案 0 :(得分:5)

您将获得第一个<a name="more"></a>,因为$("[name='more']").prevAll().find('a').each(function(){ ... }); 没有定义对numpy数组的相等比较,因此使用了数组的比较方法。 Numpy将None转换为对象数组,并将其广播为图像的大小。 ValueError的结果是逐元素比较,即与图像大小相同的布尔数组。

您应该做的代替这一切

NoneType

==比较原始引用。建议您检查“无”,因为它更快并且“无”是一个单例。

第二个if src_img is None: 来自以下事实:当is为None时,它没有名为AttributeError的方法。即使是适当的数组,src_img也只是对该方法的引用,而不是调用它的结果。

奇怪的是,您本可以完全摆脱all的束缚,但您实际上不应该这样做,因为在这种情况下,这完全是一种愚弄。当src_img.all为None时,比较的标量为True,因此if np.all(src_img == None):将返回True。如果src_img是一个数字数组,则每个元素将比较False,而np.all将返回False。这个世界唯一一次给出错误结果的情况是,如果您有一个src_img是对象数组,其所有元素均为None。