Как обработать исключение, чтобы скрипт продолжал работать? - PullRequest
0 голосов
/ 26 сентября 2019

Существует скрипт, который отправляет запросы API через итерацию словаря параметров.

Если параметры не совместимы между собой (метрики и измерения) или имеется ошибка, выдается исключение:

googleapiclient.errors.HttpError: "Не удалось проанализировать содержимое (N / A) параметров поля.filters.">

И сценарий перестает работать.

Похоже на это

def yt_return_api_response(yt_params):
    responses = []
    timestamp = []

    try:
        youtubeAnalytics = get_service()
        for k, v in yt_params.items():
            request = execute_api_request(
                youtubeAnalytics.reports().query,
                ids=v['ids'],
                startDate=v['startDate'],
                endDate=v['endDate'],
                metrics=v['metrics'],
                dimensions=v['dimensions'],
                filters=v['filters'],
                maxResults=v['maxResults'],
                sort=v['sort'])
            response = youtube_response(request)
            responses.append(response)

            # get the timestamp
            timestamp_request = dt.datetime.now()
            timestamp_request = timestamp_request.strftime('%Y-%m-%d %H:%M:%S.%f')
            timestamp.append(timestamp_request)

       return responses, timestamp

except Exception as e:
        logging.error('Check the request params, unsupported query', exc_info=True)

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

С 'while True' он запускается и продолжает работать без какого-либо результата.

def yt_return_api_response(yt_params, request_ids, filters):
    responses = []
    timestamp = []
    while True:
               try:

с параметром finally возвращает пустые списки

def yt_return_api_response(yt_params):
    responses = []
    timestamp = []
    try:
        youtubeAnalytics = get_service()
        for k, v in yt_params.items():
            request = execute_api_request(
                youtubeAnalytics.reports().query,
                ids=v['ids'],
                startDate=v['startDate'],
                endDate=v['endDate'],
                metrics=v['metrics'],
                dimensions=v['dimensions'],
                filters=v['filters'],
                maxResults=v['maxResults'],
                sort=v['sort'])
            response = youtube_response(request)
            responses.append(response)

            # get the timestamp
            timestamp_request = dt.datetime.now()
            timestamp_request = timestamp_request.strftime('%Y-%m-%d %H:%M:%S.%f')
            timestamp.append(timestamp_request)

    except Exception as e:
            logging.error('Check the request params, unsupported query', exc_info=True)

   finally:
          return responses, timestamp

Есть ли другой способ обработки исключений?

1 Ответ

1 голос
/ 26 сентября 2019

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

def yt_return_api_response(yt_params):
    responses = []
    timestamp = []
    youtubeAnalytics = get_service()
    for k, v in yt_params.items():
        try:
            request = execute_api_request(
                youtubeAnalytics.reports().query,
                ids=v['ids'],
                startDate=v['startDate'],
                endDate=v['endDate'],
                metrics=v['metrics'],
                dimensions=v['dimensions'],
                filters=v['filters'],
                maxResults=v['maxResults'],
                sort=v['sort'])
            response = youtube_response(request)
            responses.append(response)

            # get the timestamp
            timestamp_request = dt.datetime.now()
            timestamp_request = timestamp_request.strftime('%Y-%m-%d %H:%M:%S.%f')
            timestamp.append(timestamp_request)
        except Exception as e:
            logging.error('Check the request params, unsupported query', exc_info=True)

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