2014-01-07 56 views
2

如果某些條件不滿足,我經常希望我的Python代碼死掉。我通常只使用assert whatever()。不過,我有時會跑__debug__等於False。在這些情況下,我仍然需要檢查一些類似於斷言的情況。我相信處理這些案件的「正確」方式只是一個例子:if not whatever(): raise Exception('Error message!')。換句話說,我認爲使用assert進行檢查是正確的,您可能很樂意去做這些檢查,大概是那些耗時或者會運行很多次的檢查。是否有一種比較完善的條件來完成同樣的事情?Python中的Terse錯誤檢查

在Perl中,我只會使用whatever() or die。當然,鑑於語言之間的哲學差異,看到Perl需要更少的字符並不令人驚訝。

+1

'def die(why):raise Exception(why)'有什麼問題?然後將它用作'whatever()或者die('whatever is broken')' – mgilson

+0

所以,即使你有__ debug __ = False,你仍然希望你的代碼死掉。如果是這樣,如果條件滿足(或沒有滿足,取決於你想要的),你可以做sys.exit()。 – astromax

回答

0

有一兩件事你可以做的是建立自己的斷言版本:

def confirm(expression): 
    if not expression: 
     raise AssertionError 

然後,而不是使用assert whatever(),你可以改爲做confirm(whatever())

另外,如果你想模仿Perl中,你可以做到以下幾點:

def die(): 
    raise Exception() 

whatever() or die() 

如果whatever()回報Truedie()永遠不會執行(由於布爾短路),並計劃將歡快突突遠。如果whatever()返回False,那麼程序將終止。

從技術上講,這是另外兩個字符,然後您可以將die重命名爲d,並最終寫入相同數量的字符。

我敢肯定,這不是Pythonic的做事方式,但可以選擇,如果你喜歡這種方式。