2011-01-13 66 views
10

在視圖功能,我有這樣的:在Django中,如何獲取異常消息?

try: 
    url = request.POST.get('u', '') 
    if len(url) == 0: 
     raise ValidationError('Empty URL') 
except ValidationError, err: 
    print err 

的輸出是一個字符串:[u'Empty URL']

當我試圖傳遞錯誤信息到我的模板(在字典釀,像{ 'error_message': err.value } ),模板成功獲取消息(使用{{ error_message }})。

問題是,我得到與上面完全相同的字符串,[u'Empty URL'],與[u'...']

我該如何擺脫?

(Python的2.6.5,1.2.4 Django的,Xubuntu的10.04)

回答

12

ValidationError實際上保存了多個錯誤消息。

print err的輸出是[u'Empty URL'],因爲這是由repr(err.messages)返回的字符串(請參閱ValidationError.__str__源代碼)。

如果您想打印一個可讀的消息出來ValidationError的,您可以連接錯誤信息的列表,例如:

print '; '.join(err.messages) 
-2

我通過改變ValidationErrorBaseException固定它。

+1

這其實是不好的做法,我會說。 BaseException捕獲所有內容,而你只能處理ValidationError。如果另一個異常彈出,那是因爲你的代碼有錯誤,應該修復。 – Fred 2012-10-15 17:35:24

+0

好吧,我自己也提出了錯誤/異常。 `try`塊中的代碼非常小,我認爲出現不同類型錯誤的機會很渺茫。我只是想重用`ValidationError`來實現語義。我想更合適的方法是將`BaseException`與我自己的驗證錯誤進行子類化?無論如何,自從我第一次發佈這個代碼以來,代碼已經發生了很大的變化,我的解決方法已不再適用,所以我接受了上面的答案。 – 2012-10-16 08:31:57