在我抛出ValueError时,HTTP 500是否合适?
如果在数据库中发现一个用户,我会抛出ValueError异常。
try:
db.session.query(User).filter_by(id=user.id).one()
raise ValueError("The user already exists in data base")
except NoResultFound as e:
# Ajouter à la session
db.session.add(user)
db.session.commit()
错误状态码是500。这样对吗?通常500错误是服务器错误的结果,在我抛出ValueError时不应作为状态码。
解决方案
如果引发错误的原因是来自客户端的数据,你应该抛出一个属于400类的HTTP错误。
你绝不应该显式地抛出500状态:这些状态保留给短暂的错误,或你代码中未预见的情况(Bug)。如果它们真的发生,就让你正在使用的Web框架来抛出它们;对于你检测到的任何情况,找到原因,修复代码,或将该错误处理为抛出一个合适的400状态。
这其实很重要:请求方在收到4xx类状态码时,应该知道重复该POST请求将得到相同的结果。
对于这个特定情况,合适的确切错误应为 409 - 冲突
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。