2016-04-22 3 views
34

Я хотел бы проверить, нет ли переменной None или numpy.array. Я выполнил функцию check_a, чтобы сделать это.ValueError при проверке, если переменная равна None или numpy.array

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() 
+1

Этот «ValueError» является одним из самых распространенных вопросов «numpy». Это означает, что 'not a' производит логический массив, с (в данном случае) 2 значениями. Этот логический массив не может использоваться как условие 'if'! Альтернатива 'is None '- это хорошо знать, но вы также должны понимать эту ошибку. – hpaulj

ответ

53

Просто сделай это !:

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

Или, если вы хотите быть более явным:

# be careful not to check for np.array but for np.ndarray! 
if type(a) is np.ndarray: 
    ... 
else: 
    ... 

Кроме того, если вы используете isinstance, он также будет возвращать True для подклассов, что типа (если это то, что вы хотите):

# be careful not to check for np.array but for np.ndarray! 
if isinstance(a, np.ndarray): 
    ... 
else: 
    ...  
Смежные вопросы