2016-04-22 10 views
34

変数がNoneかnumpy.arrayであるかどうかを確認したいと思います。私はこれを行うにはcheck_a関数を実装しました。変数がNoneかnumpy.arrayかをチェックする際のValueError

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」質問の1つです。これは 'not a'が(この場合)2つの値を持つブール値の配列を生成することを意味します。このブール値配列は 'if'条件として使うことはできません! 'is None'の代替案は知っておいてほしいですが、このエラーも理解しておく必要があります。 – hpaulj

答えて

53

はちょうどそれをください!:

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

それとも、より明確になりたい場合は:あなたはisinstanceを使用する場合にも、それはまた、そのサブクラスのためTrueを返します

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

タイプ(希望の場合):

# be careful not to check for np.array but for np.ndarray! 
if isinstance(a, np.ndarray): 
    ... 
else: 
    ...  
関連する問題