İşlev bitmeden (örn. Bir denetim başarısız olursa) bir işlevden (dönüş değeri olmayan) python'dan çıkmanın en iyi yolu nedir?


164

Bir dönüş değeri olmayan bir işlevi çağırdığımız bir yinelemeyi varsayalım. Programımın davranması gerektiğini düşündüğüm yol bu sahte kodda açıklanıyor:

for element in some_list:
    foo(element)

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return None
    do much much more...

Bunu python'da uygularsam, rahatsız edici olur, işlev a döndürür None. "Fonksiyonun gövdesinde bir kontrol başarısız olursa, dönüş değeri olmayan bir fonksiyondan çıkmanın" daha iyi bir yolu var mı?


6
Bir şeyi açıkça döndürmezseniz, Python her zaman None değerini döndürür. Ama Yok'u kapalı bırakabilirsiniz.
Keith

2
Kontrolün ne olduğuna bağlı olarak, raisebir istisna da olabilir (veya çok nadiren, fonksiyonun Doğru / Yanlış yapmasını sağlayabilirsiniz)
Rosh Oxymoron

Yanıtlar:


279

Sadece kullanabilirsiniz

return

ki tam olarak aynı

return None

NoneYürütme, bir returnifadeye çarpmadan işlev gövdesinin sonuna ulaşırsa işleviniz de geri döner . Hiçbir şey döndürmemek NonePython'a dönmekle aynı şey değildir .


returnişe yaramazsa, ben ayarlarsanız a = method(), kullandığım yöntem içinde return, hala bir arkasında kod çalıştırmaya devam. exit php exit () gibi olmalı, programı anında keser.
TomSawyer

2
@TomSawyer bir Python programını erken durdurmak için, import sysönce ve sonra sys.exit()çıkmak ama başarı veya rapor istiyorsanız yapmak sys.exit("some error message to print to stderr").
Boris

@Boris, aradığım şey buydu ve bu benim için çalıştı.
mikey

17

Öneririm:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...

13

returnbir işlevden çıkmak için ifadeyi herhangi bir parametre olmadan kullanabilirsiniz

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return
    do much much more...

veya sorundan haberdar olmak istiyorsanız bir istisna oluşturun

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        raise Exception("cause of the problem")
    do much much more...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.