2017-08-08 80 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时都可以省去输入自定义错误信息的麻烦,并直接将您指向违规方。