2

の使用に関して、何らかのアドバイスが得られることを望んでいましたsys.exit()sys.exit()スクリプトがそれ以上実行されないようにするために使用しました:

私のコード:

if  x != 20:
    query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
    if query in ['y', 'Y']:
        pass
    else:
        sys.exit()

私はいくつかの検索を行いました (そしてまだ検索中です) が、sys.exit(). スクリプトを殺すよりも少し極端ではないものはありますか? 余分なループとより好奇心旺盛な質問の組み合わせを検討しています。

4

3 に答える 3

4

コードを main() 関数に配置します。

def main():
    // your code

if __name__ == '__main__':
    main()

次に、戻るだけでスクリプトを終了できます

于 2013-06-26T05:47:04.493 に答える
3

他のコメンターが指摘しているように、関数は return を使用してスクリプトのどこからでも救済するオプションを提供します。これがおそらく最良の選択です。

技術的には、sys.exit は SystemExit 例外を発生させます。通常の try-catch を使用して SystemExit をキャッチし、必要に応じて終了を効果的に「キャンセル」できます。これは、低レベルの関数が適切な決定を下すのに十分なコンテキストを持っていない可能性があるが、高レベルのコードがステップインしてクリーンアップする可能性がある、より複雑なコードがある場合に便利です。

C/C++ や他の多くの言語の人々は、この戦術に悩まされていますが、Python ランドでは珍しくありません。一般に、フロー制御に例外を使用することはお勧めできませんが、他の人の関数を使用している場合や、小さなスクリプトを組み合わせて大きなアプリケーションを作成している場合は、便利な場合があります。

ところで、コントロールがスクリプトの一番下まで落ちた場合、とにかく「なし」を返すことを忘れないでください。したがって、あなたの例では:

if  x != 20:
    query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
    if query in ['y', 'Y']:
        // do something

と同じです

if  x != 20:
    query = raw_input("X does not equal 20. Do you want to continue? (Y/N)")
    if query in ['y', 'Y']:
        // do something
    else:
        sys.exit()

2番目の周り​​で試行/キャッチできるが最初の周りでキャッチできないという事実を除いて...ただし、あなたの例は、リターンがより良いエスケープルートであるより大きなサンプルから切り取られていると思います

于 2013-06-26T06:03:59.807 に答える