Bu fonksiyon niye Zero hatası veriyor?

import pandas as pd

def average_influenza_doses():
    # YOUR CODE HERE
    df = pd.read_csv(r"yol\NISPUF17.csv")
    try:
        lyes=len(df.CBF_01[df.CBF_01 == "YES"])
        lno=len(df.CBF_01[df.CBF_01 == "NO"])
        sumdata=lyes+lno
        avgdosyes=sumdata/lyes
        avgdosno=sumdata/lno
        say = [avgdosyes, avgdosno]
        return tuple(say)
    
    except ZeroDivisionError:
        pass
    
    
# average_influenza_doses()
assert len(average_influenza_doses())==2, "Return two values in a tuple, the first for yes and the second for no."

Denemek isteyenler için ilgili csv dosyasının linkini veriyorum:
https://www.dosya.tc/server32/rq3gqn/NISPUF17.csv.html

lyes veya lno 0 oldugu icin.

Hayır dostum, onları denedim ayrı ayrı:

lyes, lno, sumdata
image

Fonksiyonu try ve except olmadan yazsanız da kabul, yeter ki hatasız çalışsın.

Hatasiz calismasi zor, kimsede olmayan bir dosya istiyor.

Kimsede olmayan bir dosya mı?
Dosyanın linkini yukarıda paylaştım, verdiğim kodda, yol yerine indirdiğin dosyanın yolunu yazdığında çalışır ama işte zero hatasının sebebini anlayamadım.

Kimseden olmayan dosyadan kastın nedir anlamadım belki de. Açar mısın dostum.

Dosyayi paylasmadan veya paylastigini gormeden once yazmistim onu.

Kod calisiyor. Zero hatasi nedir, acar misin?

Zero değil, şimdi gördüm de, şöyle bir hata veriyor ya:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-71-380749c0010d> in <module>
----> 1 assert len(average_influenza_doses())==2, "Return two values in a tuple, the first for yes and the second for no."

TypeError: object of type 'NoneType' has no len()

Jupyterde, kurs üzerinde çalışıyorum. Normal IDLE’de yapınca hata vermiyor, ama boş geçiyor. İki adet sayı değerli, bir tuple döndürmesi lazım normalde.

Siz burda average_influenza_doses() fonksiyonunu çağırıp dönen değerin uzunluğunu bulmaya çalışıyorsunuz ama average_influenza_doses() herhangi birşey return etmediği için implicit olarak None döndürüyor. Bir değer döndürmemesinin nedeni de hata çıkması durumunda try bloğu dışında başka bir return olmaması. Yani try içinde ZeroDivisionError oluşursa try bloğu bitmeden program direkt expect bloğuna atlayacak ve fonksiyon hiçbirşey return etmediği için fonksiyondan None dönecek.

1 Beğeni

Kimse yok mu yahu şu kodlara bir çözüm bulan?

Valla calisan koda cozum bulmak zor :confused: