1

私は Python スクリプトを終了するいくつかの方法を知っていますが、ここでは適切で堅牢なコード設計を探しています (これを行うための推奨される方法のようなものです)。

私のコードのほとんどは、メイン関数から呼び出される関数で記述されています。

特定の関数(メインから呼び出される)からPythonスクリプト/プログラムの実行を停止し、ユーザーにメッセージエラーを与える最も推奨される方法を知りたいです。

私の現在のデザインの例(アイデアがあれば、より良いプラクティスについてコメントしてください):

import sys


def run_function(x):
    if x == 4:
       print 'error, x cannot be 4'
       sys.exit(0)
    else:
       print 'good x'
    return 0


def main():
    x=4
    run_function(x)
    return 0
4

3 に答える 3

4

あなたの例では、関数からエラーを発生させ、出口のみを呼び出すことをお勧めします__main__。メッセージは raise を使用して渡されます。例:

import sys

def run_function(x):
    if x == 4:
        raise ValueError('error, x cannot be 4')
    else:
        print 'good x'
    return 0

def main():
    x=4
    run_function(x)
    return 0

if __name__ == "__main__":
    try:
        main()
    except ValueError as e:
        sys.exit(e)

sys.exitこのように、関数は間違った値を受け取ったことを示し、エラーに基づいてa を呼び出すことを決定したのは呼び出し元です。

sys.exitについてもう少し詳しく:

オプションの引数 arg は、終了ステータス (デフォルトはゼロ) を示す整数、または別のタイプのオブジェクトにすることができます。整数の場合、ゼロは「正常終了」と見なされ、ゼロ以外の値はシェルなどによる「異常終了」と見なされます。ほとんどのシステムでは、0 ~ 127 の範囲である必要があり、それ以外の場合は未定義の結果が生成されます。一部のシステムには、特定の終了コードに特定の意味を割り当てるための規則がありますが、これらは一般的に未開発です。Unix プログラムは通常、コマンド ライン構文エラーに対して 2 を使用し、他のすべての種類のエラーに対して 1 を使用します。別のタイプのオブジェクトが渡された場合、None は 0 を渡すことと同等であり、その他のオブジェクトは stderr に出力され、終了コード 1 になります。特に、sys.exit("some error message") は、エラーが発生したときにプログラムをすばやく終了する方法です。

于 2013-05-11T17:26:14.147 に答える
4

メッセージを印刷し、 を使用sys.exit()してプログラムを終了します。モジュールはユーティリティ関数を使用します(argparse多かれ少なかれスタンドアロンになるように調整されています)。

def exit(status=0, message=None):
    if message:
        _print_message(message, sys.stderr)
    sys.exit(status)

ここで_print_message()、指定されたファイル オブジェクトにメッセージを書き込みますsys.stderr。基本的には使ってprintます。

于 2013-05-11T17:17:39.293 に答える