Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2009 18:28:00

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикленная обработка исключений

Здравствуйте.
Сразу скажу, что мне нужно готовое решение или наглядный пример.
Суть вот в чём…
Есть у меня скрипт, который коннектится 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
Понимаю, что не красиво, но не совсем догоняю логику (сорри, писал с бодуна :) )

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

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

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

Спасибо.



Офлайн

#2 Сен. 14, 2009 19:03:08

ZioN
От:
Зарегистрирован: 2007-07-12
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикленная обработка исключений

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

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)



Отредактировано (Сен. 14, 2009 19:06:34)

Офлайн

#3 Сен. 14, 2009 20:19:20

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Зацикленная обработка исключений

Ohmygodable!!
Спасибо, ZioN! Щас башка ещё просветлеет и я это впишу в свой быдлокод )

Ещё раз, сенки! )



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version