首页 > 解决方案 > 正确处理 psycopg2 错误

问题描述

我正在构建一个 Web 应用程序,用作我们的移动和电子应用程序的 Web API 服务器。我也在尝试正确设计我们的错误处理。

我使用Django,Django Rest FrameworkRESTful API实现。

对于psycopg2 errors,我得到以下信息:

关系 "basicinformation" 的 "unifiedidd" 列不存在\n第 1 行:插入 profile.basicinformation (unifiedidd, firstname,...\n ^\nQUERY: INSERT INTO profile.basicinformation (unifiedidd, firstname, middlename, familyname,性别, 生日) VALUES ('8f38f402-ddee-11ea-bfee-ead0fcb69cd9'::uuid, 'Lily Francis Jane', '洛伊', '超凡', '男', '1990-03-20')\ nCONTEXT: PL/pgSQL 函数 inline_code_block 第 5 行在 SQL 语句\n"

在我的视图文件中,我发现了这些错误:

def post(self, request, *args, **kwargs):
 try:
  return Response({"message": "Cool"},status=http_200_OK)
 except ProgrammingError as e:
  return Response({"message": str(e)},status=http_500_INTERNAL_SERVER_ERROR)
 except IntegrityError as e:
  return Response({"message": str(e)},status=http_500_INTERNAL_SERVER_ERROR)
 except Exception as e:
  return Response({"message": str(e)},status=http_500_INTERNAL_SERVER_ERROR)
  1. 我要确认的第一件事是,由于错误的内容,我认为输出整个内容不是一个好主意,对吧?因为它显示了实际的查询。这很有用,但可能仅用于开发人员使用的错误日志记录。
  2. 所以我假设我需要输出一条自定义消息。但鉴于可能会遇到大量错误,并且我认为不可能为每个错误创建自定义消息,我想只输出通配符错误消息,例如“遇到意外错误。请联系开发团队。”
  3. 而且,这个通配符错误消息对于开发人员和用户来说似乎也没有那么丰富。

我不确定如何正确处理异常并将其响应 API 客户端尽可能提供信息。

标签: pythonerror-handlingdjango-rest-frameworkpsycopg2try-except

解决方案


推荐阅读