Python 为什么索引器的错误处理不起作用?
我使用标准的try/except语法来跳过csv文件中的行,这些行不能正确地流式传输,因此无法下载。我的代码: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
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:块中,现在就可以工作了。谢谢你的帮助。