2016-04-22 2 views
34

Je voudrais vérifier si la variable est None ou numpy.array. J'ai implémenté la fonction check_a pour cela.ValueError lors de la vérification si la variable est None ou 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) 

Mais, ce code déclenche ValueError. Quelle est la manière directe?

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

Cette 'ValueError' est l'une des questions' numpy' les plus courantes. Cela signifie que 'not a' produit un tableau booléen, avec (dans ce cas) 2 valeurs. Ce tableau booléen ne peut pas être utilisé comme condition "if"! L'alternative '' None '' est bonne à savoir, mais vous devriez aussi comprendre cette erreur. – hpaulj

Répondre

53

Just do it !:

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

Ou si vous voulez être plus explicite:

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

Aussi, si vous utilisez isinstance, il sera également de retour True pour les sous-classes de cette tapez (si c'est ce que vous voulez):

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