Повторная попытка сброса соединения - PullRequest
0 голосов
/ 05 января 2011

Я использую urllib.request для загрузки файлов из интернета.Однако иногда я получаю Connection Reset by Peer и хочу повторить попытку.

Я пробовал следующее, но кажется, что e.errno содержит socket error, а не фактический номер ошибки:

while True:
  try:
    filename, headers = urllib.request.urlretrieve(url)
    break
  except IOError as e:
    if e.errno != errno.ECONNRESET:
      raise
  except Exception as e:
    raise

Есть предложения?

1 Ответ

3 голосов
/ 06 января 2011

Ну эта часть не нужна, прежде всего.

except Exception as e:
    raise

И аргументом IOError является тип ошибки (ошибка сокета) и заданная ему ошибка. Эта ошибка, в свою очередь, не является исходной ошибкой, но эта ошибка в аргументах, так что ...

except IOError as e:
    if e.args[1].args[0].errno != errno.ECONNRESET:
       raise

Должно работать. У меня нет сервера, который перезагрузит меня, поэтому я не могу проверить его на 100%, но он работает с ECONNREFUSED. : -)

...