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