Каков ожидаемый способ обработки неожиданных ошибок в автономных приложениях? - PullRequest
0 голосов
/ 18 июня 2019

Это вопрос, который я задавал себе некоторое время.У меня есть несколько разных скриптов Python, которые делают что-то на их стороне, не требуя какого-либо внимания.Они записывают данные в базу данных, и в большинстве случаев все идет отлично.

К сожалению, иногда они этого не делают, и я получаю довольно неожиданную ошибку из базы данных, например:

MISCONF Redis настроен для сохранения снимков RDB, но в настоящее время не может сохраняться на диске.Команды, которые могут изменить набор данных, отключены.Пожалуйста, проверьте журналы Redis для деталей об ошибке.

Дело в том, что эта ошибка не является "постоянной".Я могу использовать базу данных сотни раз, прежде чем это произойдет - если это когда-нибудь произойдет - и когда это произойдет, я перезапущу свой сценарий, и он снова пойдет хорошо.

Теперь мой вопрос: как мне справиться с этим?Оберните каждый вызов Redis в блоки try / except и, если я столкнулся с ошибкой, сбросил соединение и попытался снова?Я имею в виду, что это может быть рабочее решение, но я нахожу его неудовлетворительным по двум причинам:

  • Если ошибка не является «случайной», сценарий может зайти в бесконечный цикл, и я не осознаю этого(Я мог бы решить это, ограничив число повторов, но это кажется даже более хакерским, чем оригинальная идея)
  • Я не хочу писать предложение except Exception as e (которое слишком широкое и может помешать реальномупроблем), поэтому мне придется столкнуться с каждой возможной ошибкой, прежде чем я смогу сказать: «Если с базой данных произойдет ошибка, она будет обработана»

Так что мне делать?Я говорю здесь о Redis, но в прошлом у меня были такие же проблемы и вопросы с базами данных SQLite и MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...