Python 为什么索引器的错误处理不起作用?

Python 为什么索引器的错误处理不起作用?,python,error-handling,Python,Error Handling,我使用标准的try/except语法来跳过csv文件中的行,这些行不能正确地流式传输,因此无法下载。我的代码: for row in list_reader: media_id = row['mediaId'] filename = row['mediaId'] saveFile = media.get_item(media_id) stream_url = saveFile['str

我使用标准的try/except语法来跳过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
回溯(最近一次呼叫最后一次):
文件“downloadmedia.py”,第28行,在
stream_url=saveFile['streams'][0]['streamLocation']
索引器:列表索引超出范围

我尝试使用if/else语法,使用stream_url变量的长度,但这会产生相同的错误。有人能解释为什么错误处理不起作用吗?

如评论中所述,您的try/except位于错误的位置。通过您提供的错误,您可以看到索引错误出现在
stream\u url=saveFile['streams'][0]['streamLocation'].

您需要确保try/except覆盖了这条线以防止出现这种情况

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"

错误(列表索引超出范围)来自for循环,而不是try/except块中的代码。这就是它没有被捕获的原因。您的
索引器出现在
try…except
块之前,它应该是
except indexer:
。请参阅位于Thanke的文档,通过将saveFile和stream_url变量移动到try:块中,现在就可以工作了。谢谢你的帮助。