Python yok

Python işlevleri ve meth

Python ile bir nesneyi yalnızca o nesnenin bir değeri varsa yineleyebilirsiniz. Bunun nedeni, yinelenebilir nesnelerin yalnızca değerleri Yok'a eşit değilse erişilebilen bir sonraki öğeye sahip olmasıdır. Bir None nesnesi üzerinde yineleme yapmaya çalışırsanız, TypeError: ‘NoneType’ object is iterable değil hatası.

Bu kılavuzda, bu hatanın ne anlama geldiğinden ve neden karşılaşabileceğinizden bahsediyoruz. Bu yaygın Python hatasını nasıl çözeceğinizi çözmenize yardımcı olacak bir örnek üzerinden ilerliyoruz.

TypeError: ‘NoneType’ nesne yinelenebilir değil

Bir nesnenin yinelenebilir olması için bir değer içermesi gerekir. Hiçbiri değeri, herhangi bir nesne içermediğinden yinelenemez. Yok bir boş değeri temsil eder.

Yok bir nesne ile boş yinelenebilir arasında bir fark vardır. Herhangi bir boş listeniz veya bir dizginiz varsa bu hata oluşmaz.

Bunun nedeni listelerin ve dizeler yinelenebilir bir veri türüne sahiptir. Python yorumlayıcısı boş bir listeyle karşılaştığında, değer olmadığı için üzerinde yineleme yapmaz. Python, Yok değeri üzerinde yinelenemez, bu nedenle yorumlayıcı bir hata döndürür.

Bu hata, bir işlev bildirdiğinizde ve bir değer döndürmeyi unuttuğunuzda yaygındır.

Örnek Senaryo

Öğrenci adlarının bir listesini alan ve “E” ile başlayanları filtreleyen bir program yazalım. Bu değerleri konsola yazdıracağız.

Öğrencileri filtreleyen bir işlev tanımlayarak başlayın. isimler:

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleşin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan daha az zaman harcadı.

Bu işlev her öğede döngü yapar. “sınıf_adları” for döngüsü kullanarak listeleyin. Her öğe için döngümüz, öğenin “E” harfiyle başlayıp başlamadığını kontrol eder. Varsa, bu ad “new_class_names” liste.


Sonra, yeni listemizden geçen ve her değeri konsola yazdıran bir fonksiyon yazın:

def show_students(class_names): c için class_names: print(c)

Burada bir öğrenci listesi ilan ediyoruz Bu öğrenci listesini filter_students fonksiyonumuz aracılığıyla iletiyoruz:

students = ["Elena", "Peter", "Chad", "Sam"] Students_e_name = filter_students(students)

Bu kod, adları ile başlayan tüm öğrencileri bulan filter_students işlevini çalıştırır. “E”. Adları “E” ile başlayan öğrencilerin listesine öğrenciler_e_adı denir. Ardından, gösteri_öğrencileri işlevimizi çağırırız. yeni öğrenci listesini göster:

show_students(students_e_name)

Kodumuzu çalıştıralım ve ne olduğunu görelim:

Geri izleme (en son çağrı): Dosya "ana .py", satır 14,  show_students(students_e_name) Dosya "main.py", satır 8, show_students'de class_names'de c için: TypeError: 'NoneType' nesnesi yinelenemez

Kodumuz bir hata mesajı veriyor.

Çözüm

Sınıftaki değişken sınıf_adı üzerinde yineleme yapmaya çalıştığımızda show_students işlevi, kodumuz bir Yok değeri algılar ve bir hata verir. Bunun nedeni, “class_names” olarak ilettiğimiz değerdir. Yoktur.

Bu hata, filter_students işlevimizin bir değer döndürmemesi nedeniyle oluşur. Student_e_name değişkenine filter_students fonksiyonunun sonucunu atadığımızda, None değeri ayarlanır.

Bu hatayı çözmek için yapmalıyız. filter_students işlevimizde bir değer döndür:

def filter_students(class_names): new_class_names = [] class_names'de c için: if c.startswith("E"): new_class_names.append(c) # Buraya bir dönüş ifadesi ekledik return new_class_names def show_students(class_names): c için class_names: print(c) öğrenciler = [" Elena", "Peter", "Chad", "Sam"] Students_e_name = filter_students(students) show_students(students_e_name)

Bu kod, yeni_class_names değerini ana programa geri döndürür.< br>

Çalışıp çalışmadığını görmek için kodumuzu çalıştıralım:

Elena 

Kodumuz & ile başlayan öğrencilerin isimlerini başarıyla yazdırıyor. ldquo;E”.


NoneType İstisnasından Kaçınma

Teknik olarak, bir değerin Yok'a eşit olup olmadığını kontrol ederek NoneType istisnasını önleyebilirsiniz. bu değeri yinelemeden önce. Şu kodu göz önünde bulundurun:

def filter_students(class_names): new_class_names = [] class_names içinde c için: if c.startswith("E"): new_class_names.append(c) return new_class_names def show_students(class_names): eğer class_names Yok değilse: class_names içinde c için: print(c) öğrenciler = [ "Elena", "Peter", "Chad", "Sam"] Students_e_name = filter_students(students) show_students(students_e_name)

“show_students()” işlevi başarıyla yürütülür çünkü biz üzerinde yineleme yapmaya çalışmadan önce class_names bir None değeri olup olmadığını kontrol edin.Bu en iyi pra değil Çoğu durumda, bir NoneType hatasının nedeni kodunuzdaki başka bir yerde sorun olabileceğinden, bu işlemi uygulayın.

Eğer “is not None” tam programımıza göz atın, başka bir fonksiyonda bir return ifadesini kaçırdığımızı bilmiyoruz. Bu nedenle, bu hatayı görürseniz, istisnayı “hiçbiri değildir” kontrol edin.



Sonuç

TypeError: ‘NoneType’ Nesne yinelenemez değeri Yok'a eşit olan bir nesne üzerinde yineleme yapmaya çalıştığınızda hata oluşur.

Bu hatayı çözmek için, denediğiniz tüm değerlerin doğru olduğundan emin olun. yineleme, bir dize veya liste gibi yinelenebilir bir nesneye atanmıştır. Örneğimizde, bir “return” eklemeyi unuttuk. bir fonksiyon için ifade. Bu, işlevin bir liste yerine Yok döndürmesini sağladı.

Artık bu yaygın Python hatasını kendi kodunuzla çözmeye hazırsınız.

"Python.Engineeringsı hayatıma girdi. en çok ihtiyacım olduğunda ve hızlı bir şekilde bir eğitim kampıyla eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, hayattaki değerlerim ve hedeflerime uygun hayalimdeki işi buldum!"

Venüs, Rockbot'ta Yazılım Mühendisi





Python yok: StackOverflow Questions

Tutorials