检查变量是 None 还是 numpy.array 时出现 ValueError
ValueError when checking if variable is None or numpy.array
我想检查变量是 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 数组表示它是一个广播的逐元素相等比较,生成一个布尔数组:
>>> 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
,它也将 return True
用于该类型的子类(如果您需要的话)。考虑到 np.matrix
是多么糟糕和不兼容,你可能真的不想要这个:
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
坚持==
不考虑其他类型,以下也是可以的
type(a) == type(None)
我想检查变量是 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 数组表示它是一个广播的逐元素相等比较,生成一个布尔数组:
>>> 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
,它也将 return True
用于该类型的子类(如果您需要的话)。考虑到 np.matrix
是多么糟糕和不兼容,你可能真的不想要这个:
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
坚持==
不考虑其他类型,以下也是可以的
type(a) == type(None)