## Question

Asked By – Light Yagmi

I’d like to check if variable is None or numpy.array. I’ve implemented `check_a`

function to do this.

```
def check_a(a):
if not a:
print "please initialize a"
a = None
check_a(a)
a = np.array([1,2])
check_a(a)
```

But, this code raises ValueError. What is the straight forward way?

```
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()
```

**Now we will see solution for issue: ValueError when checking if variable is None or numpy.array **

## Answer

Using `not a`

to test whether `a`

is `None`

assumes that the other possible values of `a`

have a truth value of `True`

. However, most NumPy arrays don’t have a truth value at all, and `not`

cannot be applied to them.

If you want to test whether an object is `None`

, the most general, reliable way is to literally use an `is`

check against `None`

:

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

This doesn’t depend on objects having a truth value, so it works with NumPy arrays.

Note that the test has to be `is`

, not `==`

. `is`

is an object identity test. `==`

is whatever the arguments say it is, and NumPy arrays say it’s a broadcasted elementwise equality comparison, producing a boolean array:

```
>>> 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()
```

On the other side of things, if you want to test whether an object is a NumPy array, you can test its type:

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

You can also use `isinstance`

, which will also return `True`

for subclasses of that type (if that is what you want). Considering how terrible and incompatible `np.matrix`

is, you may not actually want this:

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

This question is answered By – Jerfov2

**This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **