我想處理AssertionError
這兩個都隱藏用戶的堆棧跟蹤不必要的部分,並打印一條消息,爲什麼發生錯誤和用戶應該做什麼。如何在Python中處理AssertionError,並找出它發生的行或語句?
是否有任何方法可以找出在except
塊內assert
失敗的行或語句?
try:
assert True
assert 7 == 7
assert 1 == 2
# many more statements like this
except AssertionError:
print 'Houston, we have a problem.'
print
print 'An error occurred on line ???? in statement ???'
exit(1)
我不希望有這種添加到每個斷言語句:
assert 7 == 7, "7 == 7"
,因爲它重複信息。
兩個問題。首先,如果您無法確定'try..except'中發生異常的位置,那麼這是'try..except'塊太大的標誌。其次,這種被assert抓住的東西不是用戶應該看到的東西。如果他們看到一個'AssertionError',正確的做法是讓他們聯繫程序員並說「WTF ?!」。 – 2012-07-20 21:51:53
@John Y,你好像很困惑。你說'AssertionError's不應該被用戶看到,然後用戶應該做什麼,當他看到一個。它不可能是兩個! – devtk 2012-07-20 22:18:50
BTW:斷言應該是關於你的代碼的結構,也就是說,只有當你的軟件有bug時,斷言纔會失敗。他們不應該用來檢查用戶輸入。您可能會考慮爲此應用程序使用不同的例外。 – 2012-07-21 00:42:50