web-dev-qa-db-ja.com

プログラムを終了するように指示する方法はありますか?

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

Elif choice == "q":
    print()

無限ループに入れて空白行を印刷し続けるまで、それはうまくいきました。プログラムを終了できる方法はありますか?それ以外の場合、別の解決策を考えられますか?

40
Kudu

1つの方法は次のとおりです。

_sys.exit(0)
_

もちろん_import sys_する必要があります。

別の方法は、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 __== "__main__":
    run()
_

returnを使用するときにrun()関数が必要な唯一の理由は、(他の言語とは異なり)Pythonのメイン部分から直接returnできないことです。コード(関数内にない部分)。

84
Greg Hewgill

プログラムを終了する実際の方法は、呼び出すことです

_raise SystemExit
_

それは_sys.exit_ とにかく である。

単純なSystemExit、またはNoneを単一の引数として使用すると、プロセスの終了コードがゼロに設定されます。整数以外の例外値(raise SystemExit("some message"))は、例外値を_sys.stderr_に出力し、終了コードを1に設定します。整数値は、プロセスの終了コードを値に設定します。

_$ python -c "raise SystemExit(4)"; echo $?
4
_
18
tzot

Python 3にはexit()関数があります:

Elif choice == "q":
    exit()
11

見る - sys.exit 。この関数は、指定された終了ステータスでプログラムを終了します。

3
avpx

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

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

Alex Martelliからのこの回答 詳細については。

2
Arnaud P