Я использую прослушиватель базы данных Firebase Realtime для прослушивания изменений в пути к базе данных.
Моя программа недавно потерпела крах из-за следующей ошибки 503, которая, кажется, возникла в базовой библиотеке requests
:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/site-packages/firebase_admin/db.py", line 123, in _start_listen
for sse_event in self._sse:
File "/usr/local/lib/python3.7/site-packages/firebase_admin/_sseclient.py", line 128, in __next__
self._connect()
File "/usr/local/lib/python3.7/site-packages/firebase_admin/_sseclient.py", line 112, in _connect
self.resp.raise_for_status()
File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 503 Server Error: Service Unavailable for url: https://database_url...
Моя инициализация слушателя обернута в оператор try, поэтому я не уверен, почему это не было перехвачено, проглочено и повторено, как я ожидал:
def init_listener():
try:
listener = firebase_admin.db.reference(db_path).listen(handle_change)
except Exception as e:
time.sleep(1) # Retry in one second.
init_listener()
IЯ хотел бы обработать будущие ошибки 503, но я не уверен, как это сделать.
Кроме того, я использую except Exception as e
выше для демонстрации / отладки, но я также не уверен, будет ли requests.exceptions.HTTPError
достаточно конкретным, чтобы поймать только 500 ошибок (хотя я не знаю, чтодругие ошибки могут возникнуть).