2010-08-18 3 views
3

Я все еще относительно новичок в Python, поэтому, если это очевидный вопрос, я прошу прощения.Обнаружение тайм-аутов в Python urllib2 urlopen

Мой вопрос касается библиотеки urllib2, и это функция urlopen. В настоящее время я использую это для загрузки большого количества страниц с другого сервера (все они находятся на одном и том же удаленном хосте), но скрипт время от времени убивается ошибкой таймаута (я предполагаю, что это от больших запросов).

Есть ли способ сохранить скрипт, запущенный после таймаута? Я хотел бы получить все страницы, поэтому я хочу, чтобы скрипт продолжал пытаться, пока он не получит страницу, а затем движется дальше.

На боковой ноте поддерживается ли подключение к серверу?

ответ

2

В следующий раз при возникновении ошибки обратите внимание на сообщение об ошибке. В последней строке указывается тип исключения. Например, это может быть urllib2.HTTPError. Как только вы узнаете тип поднятого исключения, его можно поймать в блоке try...except. Например:

import urllib2 
import time 

for url in urls: 
    while True: 
     try: 
      sock=urllib2.urlopen(url) 
     except (urllib2.HTTPError, urllib2.URLError) as err: 
      # You may want to count how many times you reach here and 
      # do something smarter if you fail too many times. 
      # If a site is down, pestering it every 10 seconds may not 
      # be very fruitful or polite. 
      time.sleep(10) 
     else:    
      # Success 
      contents=sock.read() 
      # process contents 
      break    # break out of the while loop 
+0

Итак, если я правильно понимаю, это сделает его «попробовать», пока он не возвращает ошибку? – Parker

+0

@Parker: Когда Python достигает кода в блоке 'try', если происходит' urllib2.HTTPError' или 'urllib2.URLError', Python перейдет к блоку' except'. Если исключение не возникает, Python перейдет в блок 'else'. – unutbu

Смежные вопросы