2017-08-08 24 views
0

我想使用斷言,以便在斷言失敗時存在我的腳本。如何在python斷言失敗時退出?

對於我寫了自己的功能,它停止腳本

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

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

有沒有辦法做到這一點與蟒蛇本地斷言?

assert False # should exit the script 
+1

如果它們失敗,則原生斷言將引發異常,除非您捕捉它,否則將終止該應用程序。 – SwiftsNamesake

+1

只是*不抓住*'AssertionError's應該做的伎倆......爲什麼你需要一個更直接的'退出'? – deceze

+0

你是對的,失敗的斷言確實已經停止了腳本。我很困惑,因爲日誌順序是錯誤的,在日誌中,在斷言異常之後,一些輸出被記錄下來 – Skip

回答

2

正如已經指出的那樣,未處理的AssertionError,通過assert如扔了,應該已經停止腳本。

assert如果所測試的條件未評估爲True,則總是失敗。也就是as long as you do not start in optimized mode,在這種情況下它不會拋出AssertionError

所以

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

應該是你想要什麼,如果你絕對要打電話sys.exit()和使用assert,雖然

assert condition 

將停止腳本一樣精細,並提供一個stacktrace,這每次您致電assert_exit時都可以省去輸入自定義錯誤信息的麻煩,並直接將您指向違規方。