Форум сайта python.su
заработало, если кому надо, код:
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
Отредактировано unza (Июль 28, 2017 17:27:42)
Офлайн
не интересно - перехватывать и обрабатывать нужный Exception
Офлайн
через 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
Отредактировано unza (Июль 28, 2017 18:54:51)
Офлайн
а как связаны в данном случае try except и with as?
Офлайн
Если честно, увидел пример, и подумал, что можно как-то использовать эти операторы в моем случае. Ведь функция load(url) на примере из 6го поста не должна по идее вызывать останов программы, а всего лишь как-то передавать ошибку в вызывающую ее функцию load_with_time(url, timeout), где она будет обработана исключением. Но скорее всего ошибся с этим предположением((
Офлайн
unzaНе надо в load() ничего менять, если там выпало исключение, то оно станет распространяться и выйдет из load() наружу, и вот там его и надо перехватывать (рядом с таймаутом).
через try - except заработало:
Офлайн