Olup not aolmadığını test etmek aiçin kullanmak None, diğer olası değerlerinin adoğruluk değerine sahip olduğunu varsayar True. Bununla birlikte, çoğu NumPy dizisinin bir doğruluk değeri yoktur ve notbunlara uygulanamaz.
Bir nesnenin olup olmadığını test etmek istiyorsanız None, en genel ve güvenilir yol, kelimenin tam anlamıyla aşağıdakilere iskarşı bir kontrol kullanmaktır None:
if a is None:
...
else:
...
Bu, doğruluk değerine sahip nesnelere bağlı değildir, bu nedenle NumPy dizileriyle çalışır.
Testin olması gerektiğini unutmayın is, değil ==.isbir nesne kimlik testidir. ==argümanlar ne derse desin ve NumPy dizileri bunun bir boole dizisi üreten bir yayınlanmış elementsel eşitlik karşılaştırması olduğunu söylüyor:
>>> 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()
Diğer taraftan, bir nesnenin NumPy dizisi olup olmadığını test etmek istiyorsanız, türünü test edebilirsiniz:
# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
...
else:
...
Ayrıca , bu türdeki alt sınıflar için isinstancede dönecek Trueolan (eğer istediğiniz buysa) kullanabilirsiniz. Ne kadar korkunç ve uyumsuz np.matrixolduğunu düşünürsek , aslında bunu istemeyebilirsiniz:
# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
...
else:
...
ValueErroren yaygınnumpysorulardan biridir. Bunot a, (bu durumda) 2 değerli bir boole dizisi oluşturduğu anlamına gelir . Bu boole dizisi birifkoşul olarak kullanılamaz !is NoneAlternatif bilmek iyidir, ama aynı zamanda bu hatayı anlamalıdır.