【问题标题】:In Django, how can I get an exception's message?在 Django 中,如何获取异常消息?
【发布时间】:2011-06-08 09:26:26
【问题描述】:

在视图函数中,我有类似的东西:

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、Django 1.2.4、Xubuntu 10.04)

【问题讨论】:

    标签: python django exception-handling


    【解决方案1】:

    我通过将ValidationError 更改为BaseException 来修复它。

    【讨论】:

    • 我会说这实际上是一种不好的做法。 BaseException 捕获所有内容,而您应该只处理 ValidationError。如果出现另一个异常,那是因为您的代码中有错误,应该修复。
    • 好吧,我自己确实提出了错误/异常。 try 块中的代码非常 最少,我认为弹出不同类型错误的可能性很小。我只是想重用ValidationError 用于语义目的。我想更合适的方法是使用我自己的验证错误对BaseException 进行子类化?无论如何,自从我第一次发布此代码以来,代码已经发生了很大变化,我的解决方法不再适用,所以我接受了上面的答案。
    【解决方案2】:

    ValidationError 实际上包含多个错误消息。

    print err 的输出是[u'Empty URL'],因为这是repr(err.messages) 返回的字符串(参见ValidationError.__str__ 源代码)。

    如果您想从ValidationError 中打印一条可读消息,您可以连接错误消息列表,例如:

        # Python 2 
        print '; '.join(err.messages)
    
        # Python 3
        print('; '.join(err.messages))
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多