Cách tốt nhất để thoát một hàm (không có giá trị trả về) trong python trước khi hàm kết thúc (ví dụ: kiểm tra thất bại) là gì?


163

Giả sử một phép lặp trong đó chúng ta gọi một hàm không có giá trị trả về. Cách tôi nghĩ rằng chương trình của tôi nên hành xử được giải thích trong mã giả này:

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

Nếu tôi thực hiện điều này trong python, điều đó làm phiền tôi, rằng hàm trả về a None. Có cách nào tốt hơn để "thoát khỏi hàm, không có giá trị trả về, nếu kiểm tra không thành công trong thân hàm"?


6
Python luôn trả về Không nếu bạn không trả lại một cách rõ ràng. Nhưng bạn có thể bỏ đi Không có.
Keith

2
Tùy thuộc vào kiểm tra là gì, bạn cũng có thể là raisemột ngoại lệ (hoặc, rất hiếm khi, làm cho hàm trả về Đúng / Sai)
Rosh Oxymoron

Câu trả lời:


276

Bạn chỉ có thể sử dụng

return

mà chính xác như

return None

Hàm của bạn cũng sẽ trở lại Nonenếu thực thi đến cuối thân hàm mà không nhấn một returncâu lệnh. Trả về không có gì giống như trả về Nonetrong Python.


returnkhông hoạt động, nếu tôi thiết lập a = method(), bên trong phương thức tôi sử dụng return, nó vẫn tiếp tục chạy mã phía sau a. exit nên giống như php exit (), nó phá vỡ chương trình ngay lập tức.
TomSawyer

2
@TomSawyer để sớm dừng chương trình Python, hãy thực hiện import systrước và sau đó sys.exit()nếu bạn muốn thoát nhưng báo cáo thành công hoặc sys.exit("some error message to print to stderr").
Boris

@Boris, đây là những gì tôi đang tìm kiếm và điều này làm việc cho tôi.
mikey

17

Tôi muốn đề nghị:

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

13

bạn có thể sử dụng returncâu lệnh mà không có bất kỳ tham số nào để thoát khỏi hàm

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

hoặc đưa ra một ngoại lệ nếu bạn muốn được thông báo về vấn đề này

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...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.