Apa cara terbaik untuk keluar dari suatu fungsi (yang tidak memiliki nilai balik) dalam python sebelum fungsi berakhir (mis. Sebuah cek gagal)?

164

Mari kita asumsikan iterasi di mana kita memanggil suatu fungsi tanpa nilai balik. Cara saya berpikir program saya harus berperilaku dijelaskan dalam pseudocode ini:

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...

Jika saya menerapkan ini dalam python, itu mengganggu saya, bahwa fungsi mengembalikan a None. Apakah ada cara yang lebih baik untuk "keluar dari suatu fungsi, yang tidak memiliki nilai balik, jika sebuah cek gagal dalam tubuh fungsi"?

Aufwind
sumber
6
Python selalu mengembalikan Tidak Ada jika Anda tidak secara eksplisit mengembalikan sesuatu. Tapi Anda bisa membiarkan None.
Keith
2
Tergantung pada apa ceknya, Anda mungkin juga raisepengecualian (atau, sangat jarang, membuat fungsi kembali Benar / Salah)
Rosh Oxymoron

Jawaban:

279

Anda cukup menggunakan

return

yang tidak persis sama dengan

return None

Fungsi Anda juga akan kembali Nonejika eksekusi mencapai akhir dari fungsi tubuh tanpa memukul returnpernyataan. Mengembalikan apa pun sama dengan mengembalikan Nonedengan Python.

Sven Marnach
sumber
returntidak berfungsi, jika saya atur a = method(), di dalam metode yang saya gunakan return, masih tetap menjalankan kode di belakang a. exit harus seperti php exit (), itu merusak program secara instan.
TomSawyer
2
@ TomSawyer untuk menghentikan program Python lebih awal, lakukan import syspertama dan kemudian sys.exit()jika Anda ingin keluar tetapi melaporkan keberhasilan atau sys.exit("some error message to print to stderr").
Boris
@ Boris, ini yang saya cari dan ini berhasil untuk saya.
mikey
17

Saya akan menyarankan:

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

Anda dapat menggunakan returnpernyataan tanpa parameter apa pun untuk keluar dari suatu fungsi

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

atau ajukan pengecualian jika Anda ingin diberi tahu tentang masalahnya

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...
Cédric Julien
sumber