47

プログラムメニューの「q」(終了)オプションには、次のコードがあります。

elif choice == "q":
    print()

空白行を印刷し続ける無限ループに入れるまでは、問題なく機能しました。プログラムを終了できる方法はありますか?そうでなければ、あなたは別の解決策を考えることができますか?

4

5 に答える 5

98

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

于 2010-05-12T23:24:44.760 に答える
26

プログラムを終了する実際の方法は、

raise SystemExit

sys.exit とにかく、それは何をするかです。

プレーンSystemExit、またはNone単一の引数として、プロセスの終了コードをゼロに設定します。整数以外の例外値(raise SystemExit("some message"))は、例外値をに出力しsys.stderr、終了コードを1に設定します。整数値は、プロセスの終了コードを次の値に設定します。

$ python -c "raise SystemExit(4)"; echo $?
4
于 2010-06-10T09:31:27.170 に答える
14

Python 3には、次のexit()関数があります。

elif choice == "q":
    exit()
于 2010-05-12T23:45:55.957 に答える
3

を参照してくださいsys.exit。その関数は、指定された終了ステータスでプログラムを終了します。

于 2010-05-12T23:24:58.180 に答える
3

sys.exit()または例外に基づくソリューションは、マルチスレッド環境では機能しない可能性があることに注意してください。

exit()は最終的に「のみ」例外を発生させるため、メインスレッドから呼び出された場合にのみプロセスを終了し、例外はインターセプトされません。(ドキュメント

詳細については、AlexMartelliからのこの回答。

于 2013-11-07T20:46:48.607 に答える