gpt4 book ai didi

python - 检查变量是否为 None 或 numpy.array 时出现 ValueError

转载 作者:IT老高 更新时间:2023-10-28 21:32:00 26 4
gpt4 key购买 nike

我想检查变量是 None 还是 numpy.array。我已经实现了 check_a 函数来做到这一点。

def check_a(a):
if not a:
print "please initialize a"

a = None
check_a(a)
a = np.array([1,2])
check_a(a)

但是,这段代码引发了 ValueError。什么是直截了当的方法?

ValueError                                Traceback (most recent call last)
<ipython-input-41-0201c81c185e> in <module>()
6 check_a(a)
7 a = np.array([1,2])
----> 8 check_a(a)

<ipython-input-41-0201c81c185e> in check_a(a)
1 def check_a(a):
----> 2 if not a:
3 print "please initialize a"
4
5 a = None

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

最佳答案

使用 not a 测试 a 是否为 None 假设 a 的其他可能值具有True 的真值。但是,大多数 NumPy 数组根本没有真值,并且 not 不能应用于它们。

如果你想测试一个对象是否为 None,最通用、最可靠的方法是逐字地使用 is 检查 None :

if a is None:
...
else:
...

这不依赖于具有真值的对象,因此它适用于 NumPy 数组。

请注意,测试必须是 is,而不是 ==is 是一个对象身份测试。 == 是参数所说的任何内容,NumPy 数组表示这是一个广播的元素相等比较,产生一个 bool 数组:

>>> a = numpy.arange(5)
>>> a == None
array([False, False, False, False, False])
>>> if a == None:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()

另一方面,如果你想测试一个对象是否是一个 NumPy 数组,你可以测试它的类型:

# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
...
else:
...

您还可以使用 isinstance,它还将为该类型的子类返回 True(如果这是您想要的)。考虑到 np.matrix 是多么糟糕和不兼容,你可能并不真正想要这个:

# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...

关于python - 检查变量是否为 None 或 numpy.array 时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783921/

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