Найти - Пользователи
Полная версия: Зацикленная обработка исключений
Начало » Python для новичков » Зацикленная обработка исключений
1
Chrizt
Здравствуйте.
Сразу скажу, что мне нужно готовое решение или наглядный пример.
Суть вот в чём…
Есть у меня скрипт, который коннектится urllib'ом к хосту, берет данные и обрабатывает их (парсит, в общем).

Но, из-за нестабильности коннекта и огромного числа запросов, иногда возникают ошибки (исключения).

обычную обработку я сделал, по принципу (это кусочек кода):
i = 0
while i < len(b):
time.sleep(5)
try:
req = ur.urlopen(b[i]).read()
except urllib.socket.error:
req = ur.urlopen(b[i]).read()
except IOError:
req = ur.urlopen(b[i]).read()
то есть, если возникает исключение, повторяем тот же запрос.

Однако, бывает, что исключение обработалось, но оно всё равно, возникает, уже вне блока try.

Попробовал сделать чуть иначе:

def urlim(biurl):
try:
rq = ur.urlopen(biurl).read()
except urllib.socket.error:
rq = ur.urlopen(biurl).read()
except IOError:
rq = ur.urlopen(biurl).read()
return rq

i = 0
while i < len(b):
time.sleep(5)
url = b[i]
print url
while True:
try:
req = ur.urlopen(url).read()
except urllib.socket.error:
req = urlim(url)
except IOError:
req = urlim(url)
else:
break
Понимаю, что не красиво, но не совсем догоняю логику (сорри, писал с бодуна :) )

В общем, всё равно, ошибка возникает и НЕ обрабатывается.
Возник дисконнект у меня, или сервер сильно задержал ответ - вылезла ошибочка и скрипт остановился :(

Пожалуйста, помогите сделать полностью бесконечную и,по возможности, более красивую реализацию постоянной обработки исключений.

Если не совсем понятно описал - отпишитесь, я постараюсь конкретизировать.

Спасибо.
ZioN
ну если уж быдлокодить, так мб так лучше? %)

for url in b:
while 1:
try:
req = ur.urlopen(url).read()
except (urllib.socket.error, IOError):
time.sleep(5)
continue
else:
break
go_parse_url(req, url)
Chrizt
Ohmygodable!!
Спасибо, ZioN! Щас башка ещё просветлеет и я это впишу в свой быдлокод )

Ещё раз, сенки! )
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