Это вопрос, который я задавал себе некоторое время.У меня есть несколько разных скриптов Python, которые делают что-то на их стороне, не требуя какого-либо внимания.Они записывают данные в базу данных, и в большинстве случаев все идет отлично.
К сожалению, иногда они этого не делают, и я получаю довольно неожиданную ошибку из базы данных, например:
MISCONF Redis настроен для сохранения снимков RDB, но в настоящее время не может сохраняться на диске.Команды, которые могут изменить набор данных, отключены.Пожалуйста, проверьте журналы Redis для деталей об ошибке.
Дело в том, что эта ошибка не является "постоянной".Я могу использовать базу данных сотни раз, прежде чем это произойдет - если это когда-нибудь произойдет - и когда это произойдет, я перезапущу свой сценарий, и он снова пойдет хорошо.
Теперь мой вопрос: как мне справиться с этим?Оберните каждый вызов Redis в блоки try / except
и, если я столкнулся с ошибкой, сбросил соединение и попытался снова?Я имею в виду, что это может быть рабочее решение, но я нахожу его неудовлетворительным по двум причинам:
- Если ошибка не является «случайной», сценарий может зайти в бесконечный цикл, и я не осознаю этого(Я мог бы решить это, ограничив число повторов, но это кажется даже более хакерским, чем оригинальная идея)
- Я не хочу писать предложение
except Exception as e
(которое слишком широкое и может помешать реальномупроблем), поэтому мне придется столкнуться с каждой возможной ошибкой, прежде чем я смогу сказать: «Если с базой данных произойдет ошибка, она будет обработана»
Так что мне делать?Я говорю здесь о Redis, но в прошлом у меня были такие же проблемы и вопросы с базами данных SQLite и MySQL.