检查变量是否为None或numpy.array时的ValueError

rkj*_*983 88 python numpy is-empty

我想检查变量是否为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)
Run Code Online (Sandbox Code Playgroud)

但是,这段代码引发了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()
Run Code Online (Sandbox Code Playgroud)

Jer*_*ov2 147

去做就对了!:

if a is None:
    ...
else:
    ...
Run Code Online (Sandbox Code Playgroud)

或者如果你想更明确:

>>> 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()
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用not a,它也将返回a该类型的子类(如果这是您想要的):

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

  • 您推荐哪个是“最佳”解决方案? (2认同)