【问题标题】:Try Except block for multiple validation errors尝试排除多个验证错误的块
【发布时间】:2016-10-31 02:49:14
【问题描述】:
try: 
    if isDateValid(date) == false:
        raise ValidationError('invalid date')
    if usernameValid(user) == false:
        raise ValidationError('invalid username')
except ValidationError:
    data = json.dumps({'status': 'Enter a valid date'})
    data = json.dumps({'status': 'Enter a valid username'})
    return HttpResponseBadRequest(data, content_type='application/json')`

如何根据引发错误的位置或传递的消息使 data = 正确消息?

【问题讨论】:

  • 你为什么要使用 try/except 呢?您可以直接在这些 if 语句中设置 data var。这将解决您的消息自定义问题。

标签: python json try-catch except


【解决方案1】:

访问您正在引发的异常实例:

try: 
    if isDateValid(date) == false:
        raise ValidationError('invalid date')
    if usernameValid(user) == false:
        raise ValidationError('invalid username')
except ValidationError as e:
    data = json.dumps({'status': str(e)})
    return HttpResponseBadRequest(data, content_type='application/json')

好吧,上面将产生'status': 'invalid date'。如果您想发送消息'enter a valid date',您必须查看通过了哪条消息:

except ValidationError as e:
    msg = 'Enter a valid '
    if str(e).endswith('date'):
        msg += 'date'
    else:
        msg += 'username'
    data = json.dumps({'status': msg})
    return HttpResponseBadRequest(data, content_type='application/json')

甚至更简单:

except ValidationError as e:
    msg = 'Enter a valid ' + str(e)[len('invalid '):]
    data = json.dumps({'status': msg})
    return HttpResponseBadRequest(data, content_type='application/json')

就个人而言,您应该问自己是否您可以针对两种不同的条件使用ValidationError 的两个不同子类。 您可以拥有InvalidUsernameErrorInvalidDateError 并分别捕获它们。 这肯定会产生一个更强大的解决方案(您不依赖于传递给引发异常的确切文本),即使对类层次结构过于深入通常也不是一件好事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2013-05-28
    • 2019-02-04
    • 2021-11-29
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多