2009-07-24 19 views
6

タスクが正常に終了した後にスクリプトを終了することについていくつか質問がありましたが、失敗したスクリプトに対して同じことをする方法はありますか?私はちょうどカメラが正しく機能していることをチェックするテストスクリプトを書いています。最初のテストが失敗した場合、次のテストも失敗する可能性があります。したがって、最初に出口を呼び出して画面に出力してエラーが発生したことを知らせないようにします。スクリプトの実行に失敗しました(Python)

これが十分な情報であることを希望します。私を助けるためにもっと詳細が必要な場合はお知らせください。

+0

unittestモジュールを使用したテストについてお話ししていますか? – bstpierre

+0

いいえ、私のpythonスクリプトは実際にテストを実行するC++プログラムを呼び出しています。カメラの電源が入っていない、またはレンズが点灯している場合は、スクリプトがうまく反応しません。いずれかの場合にはスクリプトの試行を中止します。テストを妨げる障害が他にもある可能性があるので、スクリプトを終了するとエラーが発生するようにスクリプトを設計したいと考えています。 による以前のraise文に 印刷 'エラー' sys.exit()#fairly冗長: 輸入SYS 試し: #ループ機能... レイズSystemExitを 除く –

答えて

19

あなたはexit()の機能を探していますか?

import sys 

if 1 < 0: 
    print >> sys.stderr, "Something is seriously wrong." 
    sys.exit(1) 

exit()の(オプション)のパラメータは、スクリプトがシェルに戻ります戻りコードです。通常、0以外の値はエラーを通知します。

+0

私のスクリプトは次のようになりますraiseシステムは、エラーの有無にかかわらずスクリプトの実行を強制的に強制します。それから、sys.exit()を取り除くと、スクリプト全体が実行され、エラーが報告されます。 答えを使ってどのように役立てることができますか? 私は新しいPythonユーザーです。 1 <0の場合はどういう意味ですか?それは状態を表現することになっていますか?私はそれをあまりにも遠くに読んでいますか? ありがとうございました –

+0

もし '1 <0'が単なるエラー条件の例だった場合は、それ以上の実行を中止したいでしょう。私は本当にあなたが助けを必要としているかどうかは分かりません。 'print'はエラーメッセージを出力し、' sys.exit() 'はスクリプトを終了します。どうやって違う仕事をしたいですか?単純なものがすべて必要な場合は、より複雑なソリューションを探すのはなぜですか? – sth

+0

私の問題は、発生する可能性があるエラーをどのように定義するのか分からないことだと思います。 tryステートメントの例外部分は、私が期待した通りに動作していません... –

3

sys.exit()を使用して終了することができます。ただし、上位のコードがSystemExit例外をキャッチすると、終了しません。

1

エラー条件を特定するために例外を発生させることができます。あなたのトップレベルのコードは、それらの例外をキャッチして適切に処理することができます。 sys.exitを使用して終了することができます。たとえば、Python 2.xの場合:

import sys 

class CameraInitializationError(StandardError): 
    pass 

def camera_test_1(): 
    pass 

def camera_test_2(): 
    raise CameraInitializationError('Failed to initialize camera') 

if __name__ == '__main__': 
    try: 
     camera_test_1() 
     camera_test_2() 
     print 'Camera successfully initialized' 
    except CameraInitializationError, e: 
     print >>sys.stderr, 'ERROR: %s' % e 
     sys.exit(1) 
+0

ありがとうございます。 エラーの内容に関係なくスクリプトを停止するような何かをすることはできますか?もしそうなら、私はどのようにそれを設定するのですか? –

+0

確かに。 StandardErrorやExceptionのようなより高いレベルの例外をキャッチすることができます。あるいは、exceptを使ってすべてをキャッチできます。 –

0

実行しているC++プログラムからの戻りコードをチェックし、失敗を示す場合は終了します。以下のコードでは、/ bin/falseと/ bin/trueはそれぞれエラーコードと成功コードで終了するプログラムです。あなたのプログラムでそれらを置き換えてください。

import os 
import sys 

status = os.system('/bin/true') 
if status != 0: 
    # Failure occurred, exit. 
    print 'true returned error' 
    sys.exit(1) 

status = os.system('/bin/false') 
if status != 0: 
    # Failure occurred, exit. 
    print 'false returned error' 
    sys.exit(1) 

これは、実行しているプログラムが失敗した場合はゼロで終了し、成功した場合は終了することを前提としています。

関連する問題