尝试使用Except块来解决多个验证错误

时间:2016-06-28 16:45:02

标签: python json try-catch except

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')`

如何根据抛出错误或传递消息的位置生成数据=正确的消息?

1 个答案:

答案 0 :(得分:3)

访问您要引发的异常实例:

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并单独捕捉它们。 这肯定会产生一个更强大的解决方案(你不依赖于传递给引发异常的确切文本),即使对类层次结构过于深入也不是一件好事。 / p>