【发布时间】:2016-08-15 12:00:05
【问题描述】:
我想检查变量是 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()
【问题讨论】:
-
这个
ValueError是最常见的numpy问题之一。这意味着not a产生一个布尔数组,(在这种情况下)有 2 个值。此布尔数组不能用作if条件!is None替代方案很高兴知道,但您也应该了解此错误。 -
@hpaulj:不完全——你不能重载
not,所以当not尝试将数组视为单个布尔值并发现它不能时,错误实际上会发生。如果它是~a,那么当if尝试将取反数组用作单个布尔值时,它将使用 NumPy 的重载并失败。