Как словить определенную ошибку
Работаю с ботом телеграм,который парсит гугл-таблицы. Когда данных после парсинга нет, я получаю
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://sheets.googleapis.com/v4/spreadsheets//values/A1%3AN24majorDimension=COLUMNS&alt=json returned "Requested entity was not found.">
Вопрос в том, как словить эту ошибку? Например, так:
try:
...
except googleapiclient.errors.HttpError:
...
Ответы (2 шт):
Автор решения: vp_arth
→ Ссылка
Ну, так и ловить:
try:
raise HttpError(resp, content, uri=self.uri)
except HttpError as ex:
print(ex)
Автор решения: vp_arth
→ Ссылка
нужно сделать так, чтобы заключить код в try/except, и когда он получит эту ошибку код выполнялся заново.
Для этого очень удобно использовать декоратор retrying.retry.
Функция в параметре retry_on_exception определяет нужно ли пытаться выполнить повтор для данного исключения:
import retrying
i = 1; # Глобальная переменная исключительно для демонстрации
@retrying.retry(
stop_max_attempt_number=5,
retry_on_exception=lambda ex: True, # Для любого исключения
wait_exponential_multiplier=500,
wait_exponential_max=8000)
def foo():
global i;
print(f'Try foo...{i}')
i+=1
if i < 3:
raise Error('Any error')
print('Success')
foo()
Try foo...1 Try foo...2 Success