関数が終了する前にPythonで関数(戻り値がない)を終了する(チェックが失敗するなど)ための最良の方法は何ですか?


163

戻り値なしで関数を呼び出す反復を想定しましょう。私のプログラムの振る舞いは次の疑似コードで説明されています。

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

これをpythonで実装すると、関数がを返すので面倒ですNone。「関数の本体でチェックが失敗した場合、戻り値のない関数を終了する」ためのより良い方法はありますか?


6
明示的に何かを返さない場合、Pythonは常にNoneを返します。ただし、Noneをオフにしておくことができます。
キース、

2
チェックの内容によっては、raise例外になることもあります(または、ごくまれに、関数がTrue / Falseを返すようにする)
Rosh Oxymoron

回答:


276

あなたは単に使うことができます

return

とまったく同じです

return None

またNonereturnステートメントを実行せずに実行が関数本体の終わりに達した場合にも、関数は戻ります。何も返さないことは、NonePythonで返すことと同じです。


return動作しません、私が設定した場合a = method()、使用するメソッド内returnで、それでも背後でコードを実行し続けます。exitはphp exit()のようにする必要があり、プログラムを即座に中断します。
TomSawyer、2017

2
@TomSawyerを使用してPythonプログラムを早期に停止するには、import sys最初sys.exit()に終了してから終了し、成功した場合はを報告しsys.exit("some error message to print to stderr")ます。
ボリス

@ボリス、これは私が探していたものであり、これは私のために働いた。
mikey

17

私はお勧めします:

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

13

returnパラメータなしでステートメントを使用して関数を終了できます

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

または、問題について通知を受けたい場合は例外を発生させます

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...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.