2017-08-08 17 views
0

アサーションが失敗したときにスクリプトが存在するように、アサーションを使用したいと思います。そのためにアサーションがPythonで失敗したときに終了するには?

私は、スクリプト

def assertExit(mlambda, errorMessage): 
    res = mlambda() 
    if res != True: 
     sys.exit(errorMessage) 

assertExit((lambda: False), "Should fail") 

はニシキヘビネイティブアサーションでそれを行う方法ですが停止した、独自の関数を書きましたか? 、未処理のAssertionErrorを指摘されたように

assert False # should exit the script 
+1

ネイティブアサーションは、失敗した場合に例外を発生させ、キャッチしない限りアプリケーションを終了します。 – SwiftsNamesake

+1

単純に*キャッチしない* 'AssertionError'はトリックを行うべきです...どうしてより直接的な' exit'が必要なのですか? – deceze

+0

あなたは正しいです、失敗したアサーションはすでにスクリプトを停止します。ログの順序が間違っていたため、混乱していました。ログでは、アサーションの例外後に、出力が記録されました – Skip

答えて

2

assertによってスローされたとして、すでにあなたのスクリプトを停止する必要があります。

assertは、テストする条件がTrueに評価されない場合は常に失敗します。つまり、as long as you do not start in optimized modeです。この場合、AssertionErrorが投げられません。

あなたは絶対にsys.exit()を呼び出し、assertを使用したい場合は

assert condition 

だけで微細なスクリプトを停止し、stacktraceを提供しますが、そう

def assert_exit(condition, err_message): 
    try: 
     assert condition 
    except AssertionError: 
     sys.exit(err_message) 

は、あなたが望むものでなければならず、そのassert_exitに電話するたびにカスタムエラーメッセージを入力する手間を省き、違反した相手を直接指摘します。

関連する問題