Почему обработка ошибок не работает для IndexError? - PullRequest
0 голосов
/ 07 января 2020

Я использую стандартный синтаксис try / исключением для пропуска строк в файле csv, которые не передаются должным образом и поэтому не могут быть загружены. Мой код:

        for row in list_reader:
            media_id = row['mediaId']
            filename = row['mediaId']
            saveFile = media.get_item(media_id)
            stream_url = saveFile['streams'][0]['streamLocation']

            try:
                r = requests.get(stream_url, allow_redirects=True)

                with open(os.path.join('./media', filename), 'wb') as ofile:
                    ofile.write(r.content)
                    counter += 1
            except:
                IndexError
                print "error"

Однако после загрузки ряда файлов появляется строка с ошибкой, ошибка не обрабатывается, и я получаю сообщение об ошибке:

    Traceback (most recent call last):
   File "downloadmedia.py", line 28, in <module>
   stream_url = saveFile['streams'][0]['streamLocation']
   IndexError: list index out of range

Я пробовал вместо этого используется синтаксис if / else, использующий длину переменной stream_url, но это выдает ту же ошибку. Может кто-нибудь объяснить, почему не работает обработка ошибок?

1 Ответ

1 голос
/ 07 января 2020

Как указано в комментариях, ваша попытка / исключение не в том месте. Благодаря предоставленной вами ошибке вы можете увидеть, что ошибка индекса происходит в строке stream_url = saveFile['streams'][0]['streamLocation']

. Чтобы предотвратить это, вам нужно убедиться, что попытка / исключение охватывает эту строку.

for row in list_reader:
    try:
        media_id = row['mediaId']
        filename = row['mediaId']
        saveFile = media.get_item(media_id)
        stream_url = saveFile['streams'][0]['streamLocation']
        r = requests.get(stream_url, allow_redirects=True)
        with open(os.path.join('./media', filename), 'wb') as ofile:
            ofile.write(r.content)
            counter += 1
    except IndexError:
        print "error"
...