Python 将业务层错误与API错误分离
我知道这个标题很可怕;我不擅长头衔,所以在这里 我想知道,当错误可能在应用程序内部深处引发时,在webapi中呈现统一错误响应的最佳方式是什么 应用程序中的错误根本不了解web层(也不应该知道),因此web层如何将Python 将业务层错误与API错误分离,python,error-handling,Python,Error Handling,我知道这个标题很可怕;我不擅长头衔,所以在这里 我想知道,当错误可能在应用程序内部深处引发时,在webapi中呈现统一错误响应的最佳方式是什么 应用程序中的错误根本不了解web层(也不应该知道),因此web层如何将myapp.PermissionError分为403、json.DecodeError分为400、myapp.driver.InvalidValue分为500等 我有一些想法,但我对其中任何一个都不是很喜欢 (正如代码片段可能暗示的,这是linux上的python应用程序) 使用大量除
myapp.PermissionError
分为403、json.DecodeError
分为400、myapp.driver.InvalidValue
分为500等
我有一些想法,但我对其中任何一个都不是很喜欢
(正如代码片段可能暗示的,这是linux上的python应用程序)
块来匹配我想要的异常类型。这就是我目前正在做的,但它越来越笨拙(我已经到了8岁,还有很多事情要做)
error_map = [(DecodingError, 400), (PermissionError, 403)]
try:
DoIt()
except Exception, exc:
for type, code in error_map:
if isinstance(exc, type):
response(code)
return
class PermissionError(Exception):
web_status_code = 403
try:
Doit()
except:
response(exc.web_status_code)
我喜欢选项1。这可能有点冗长,但也很清楚 选项2将抛出异常的点与决定如何处理异常的点分开。事实上,这可能不是一个太大的问题,但是如果你不需要的话,为什么要把它分开呢
我同意选项3相当丑陋。无需在该级别处理错误行为,只需抛出异常。我喜欢选项1。这可能有点冗长,但也很清楚 选项2将抛出异常的点与决定如何处理异常的点分开。事实上,这可能不是一个太大的问题,但是如果你不需要的话,为什么要把它分开呢 我同意选项3相当丑陋。无需在该级别处理错误行为,只需抛出异常即可
class PermissionError(Exception):
web_status_code = 403
try:
Doit()
except:
response(exc.web_status_code)