Правильная обработка ошибок psycopg2

#python #error-handling #django-rest-framework #psycopg2 #try-except

#python #обработка ошибок #django-rest-framework #psycopg2 #попробуйте-за исключением

Вопрос:

Я создаю веб-приложение, которое работает как сервер Web API для нашего мобильного приложения и электронного приложения. Я также пытаюсь правильно спроектировать нашу обработку ошибок.

Я использую Django , Django Rest Framework для RESTful API реализации.

Для psycopg2 errors я получаю следующее:

«столбец «унифицированный идентификатор» отношения «базовая информация» не существует n Строка 1: ВСТАВИТЬ В profile.basicinformation (унифицированный идентификатор, firstname, …n ^ nQuery: ВСТАВИТЬ В profile.basicinformation (унифицированный идентификатор, firstname, middlename, familyname, пол, дата рождения) ЗНАЧЕНИЯ (‘8f38f402-ddee-11ea-bfee- ead0fcb69cd9’::uuid, ‘Лили Фрэнсис Джейн’, ‘Ло И’, ‘Чао Фань’, ‘Мужчина’, ‘1990-03-20’)Nконтекст: функция PL/pgSQL в строке 5 line_code_block в инструкции 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 как можно более информативно.

Комментарии:

1. Ошибка звучит так, как будто вы пропустили миграцию.

2. Извините, я забыл упомянуть, что эта ошибка была преднамеренной. Я намеренно сделал это так, чтобы я получал исключение. Что я пытаюсь решить, так это узнать, как правильно обрабатывать исключение, чтобы оно не возвращало всю эту ошибку в ответном сообщении API.

3. Я не думаю, что мне нужно выводить все это целиком, поскольку оно содержит фактический запрос к БД и столбцы, и это выглядит непрофессионально. Я думаю, может быть, я мог бы сказать ему, чтобы он возвращал «Столбец unifiedid не существует». Таким образом, пользователь точно знает, что произошло.

4. Но опять же, может быть множество ошибок, и было бы невозможно создать пользовательское сообщение для этих ошибок. Поэтому вместо этого я думаю, может быть, я могу просто отправить сообщение об ошибке с шаблоном типа «Произошла непредвиденная ошибка». Но для меня это не кажется таким информативным. Достаточно ли этого? Или есть лучший способ обработки ошибок, чтобы возвращать гораздо более информативное сообщение об ошибке?

5. Обычно ни один «клиент» не заинтересован в подробных ошибках базы данных. Поскольку они не взаимодействуют напрямую с базой данных, клиент ничего не может сделать.