2017-07-17 65 views
1

使用assert,你可以很容易地測試一個條件,而無需一個if/raise蟒蛇:使用斷言,以提高不同的錯誤類型

assert condition, msg 

相同

if not condition: 
    raise AssertionError(msg) 

我的問題是,它是否是可以使用assert來提高不同類型的Errors。例如,如果缺少特定的環境變量,找回EnvironmentError將很有用。這可以手動完成或者是try/catch或類似if/raise像以前一樣:

if not variable in os.environ: 
    raise EnvironmentError("%s is missing!" % variable) 

try: 
    assert variable in os.environ 
except: 
    raise EnvironmentError("%s is missing!" % variable) 

但我不知道是否有某種類型的快捷方式,我一直沒能夠找到,或者是否有一些解決方法可以使堆棧中有多個except

+6

Assert是一個調試時間功能,可以使用特殊的命令行標誌禁用或啓用。你可以編寫一個版本來做你需要的功能,接受一個可選的錯誤類。不過,我通常會建議純粹寫它,而不是將它委託給一個函數,這聽起來像是清理代碼而不是開發斷言 –

回答

1

內置assert是一個調試功能,它的使用範圍很窄,如果運行python -O,甚至可以從代碼中剝離。

如果您想根據條件使用單行表達式引發各種異常,請編寫一個函數!

assert_env(variable in os.environ) 

甚至

assert_env_var(variable) # knows what to check 

如果你想要一個超級通用/退化的情況下,可以考慮接受一切作爲參數(可能有一些默認值)功能:

my_assert(foo == bar, FooException, 'foo was not equal to bar')