プログラムメニューの「q」(終了)オプションには、次のコードがあります。
elif choice == "q":
print()
空白行を印刷し続ける無限ループに入れるまでは、問題なく機能しました。プログラムを終了できる方法はありますか?そうでなければ、あなたは別の解決策を考えることができますか?
1つの方法は次のことです。
sys.exit(0)
もちろんする必要がimport sys
あります。
もう1つの方法はbreak
、無限ループから抜け出すことです。たとえば、次のようにすることができます。
while True:
choice = get_input()
if choice == "a":
# do something
elif choice == "q":
break
さらに別の方法は、メインループを関数に入れて、次を使用することreturn
です。
def run():
while True:
choice = get_input()
if choice == "a":
# do something
elif choice == "q":
return
if __name__ == "__main__":
run()
run()
使用時に関数が必要になる唯一の理由は、(他のいくつかの言語とは異なり) Pythonコードの主要部分(関数内にない部分return
)から直接アクセスできないことです。return
プログラムを終了する実際の方法は、
raise SystemExit
sys.exit
とにかく、それは何をするかです。
プレーンSystemExit
、またはNone
単一の引数として、プロセスの終了コードをゼロに設定します。整数以外の例外値(raise SystemExit("some message")
)は、例外値をに出力しsys.stderr
、終了コードを1に設定します。整数値は、プロセスの終了コードを次の値に設定します。
$ python -c "raise SystemExit(4)"; echo $?
4
Python 3には、次のexit()
関数があります。
elif choice == "q":
exit()
を参照してくださいsys.exit
。その関数は、指定された終了ステータスでプログラムを終了します。
sys.exit()または例外に基づくソリューションは、マルチスレッド環境では機能しない可能性があることに注意してください。
exit()は最終的に「のみ」例外を発生させるため、メインスレッドから呼び出された場合にのみプロセスを終了し、例外はインターセプトされません。(ドキュメント)
詳細については、AlexMartelliからのこの回答。