Try Except 阻止多个验证错误

Try Except block for multiple validation errors

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: 
    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 的两个不同子 class。 你可以有 InvalidUsernameErrorInvalidDateError 并分别捕获它们。 这肯定会产生更强大的解决方案(您不依赖于传递给引发的异常的确切文本),即使 class 层次结构太深也不行这通常不是一件好事。