Найти - Пользователи
Полная версия: Исключения в urllib. TimeoutError: [WinError 10060]
Начало » Python для новичков » Исключения в urllib. TimeoutError: [WinError 10060]
1 2
unza
заработало, если кому надо, код:
 def load(site):
    req = urllib.request.Request(site, headers={'User-Agent': 'Firefox'})
    with urllib.request.urlopen(req) as data:
        charset = data.headers.get_charsets()[0]
        text = data.read().decode(charset or 'latin1')
        #print (text)
    return text
 
def get_site(site, timeout):
    text = None
    while True:
        try:
            text = load(site)
            break
        except TimeoutError:
            print ("Error network")
            time.sleep(timeout)
    return text

Но, если сеть обрывается, небольшое зависание, и вываливает лог ошибки с резюме:
urllib.error.URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:749)>

Интересно, как реализовывать что-бы программа не вываливалась?
JOHN_16
не интересно - перехватывать и обрабатывать нужный Exception
unza
через try - except заработало:
  
def load(site):
  hdr = {'User-Agent': 'Mozilla/5.0',
       'Accept': 'text/html',
       'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7',
       'Accept-Encoding': 'none',
       'Accept-Language': 'en-US,en;q=0.8',
       'Connection': 'keep-alive'}
  try:
    req = urllib.request.Request(site, headers=hdr)
    data = urllib.request.urlopen(req)
    charset = data.headers.get_charsets()[0]
    text = data.read().decode(charset or 'latin1')
  except:
    print ('Error network')
    text = None
  return text
def get_site(site, timeout):
    text = None
    while True:
        text = load(site)
        if (text != None): 
            #print (text)
            break
        else:
            print ('waite please!')
            time.sleep(timeout)
    return text

Но интересно было сделать через with as
Конкретную ошибку мне не надо обрабатывать, мне ждать появления страницы надо было.
JOHN_16
а как связаны в данном случае try except и with as?
unza
Если честно, увидел пример, и подумал, что можно как-то использовать эти операторы в моем случае. Ведь функция load(url) на примере из 6го поста не должна по идее вызывать останов программы, а всего лишь как-то передавать ошибку в вызывающую ее функцию load_with_time(url, timeout), где она будет обработана исключением. Но скорее всего ошибся с этим предположением((
py.user.next
unza
через try - except заработало:
Не надо в load() ничего менять, если там выпало исключение, то оно станет распространяться и выйдет из load() наружу, и вот там его и надо перехватывать (рядом с таймаутом).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB