У меня есть большое приложение для массовой загрузки, написанное на Python / Mechanize, с целью загрузить что-то вроде 20 000 файлов.Ясно, что любой такой большой загрузчик иногда может столкнуться с некоторыми ECONNRESET
ошибками.Теперь я знаю, как обрабатывать каждого из них в отдельности , но с этим есть две проблемы:
- Я бы действительно не хотел оборачивать каждый исходящий веб-вызов в попытку /Блок захвата.
Даже если бы я это сделал, возникла проблема с пониманием того, как обрабатывать ошибки после того, как возникло исключение.Если код просто
data = browser.response().read()
, то я точно знаю, как с ним справиться, а именно:
data = None
while (data == None):
try:
data = browser.response().read()
except IOError as e:
if e.args[1].args[0].errno != errno.ECONNRESET:
raise
data = None
, но если это просто случайный экземпляр
browser.follow_link(link)
тогда откуда мне знать, как выглядит внутреннее состояние Механизации, если где-то здесь выбросить ECONNRESET
?Например, мне нужно позвонить browser.back()
, прежде чем я попробую код еще раз?Как правильно исправить ошибку такого рода?
РЕДАКТИРОВАТЬ: Решение в принятом ответе, безусловно, работает, и в моем случае это оказалось не так сложно реализовать.Однако я по-прежнему заинтересован в том, чтобы узнать, есть ли механизм обработки ошибок, который может привести к более быстрому отлову ошибок.