2014-11-08 2 views
0

У меня есть некоторый код Python, который я использую для веб соскабливания сайта по протоколу HTTPS, используя следующий код:Повторный запуск кода после исключения

for i in range (0, number): 
html = s.get(web_address[i], verify=False, headers=headers) 
....more unrelated code 

В настоящее время я получаю прерывистый ошибку каждые 1000 ссылок или так из команды s.get [часть библиотеки запросов], которая не реплицируется - если я повторно запускаю тот же самый код с той же самой ссылкой сразу после этого, он работает правильно.

Для справки об ошибках линий я получаю являются:

File "C:\Python27\lib\site-packages\requests\sessions.py", line 469, in get 
return self.request('GET', url, **kwargs) 
File "C:\Python27\lib\site-packages\requests\sessions.py", line 457, in request 
    resp = self.send(prep, **send_kwargs) 
File "C:\Python27\lib\site-packages\requests\sessions.py", line 569, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python27\lib\site-packages\requests\adapters.py", line 407, in send 
    raise ConnectionError(err, request=request) 
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",)) 
<<< Process finished. (Exit code 1) 

Я не слишком обеспокоен фиксируя основные проблемы (... может быть что-то делать с сервером я подключаю только иногда ведет себя нечетно/непоследовательно). Я просто хочу, чтобы код «s.get» повторил попытку, если есть ошибка, а не выход из кода python. В идеале нужно попытаться выполнить команду s.get до 3x на ссылку, а затем, если все еще получить ошибку, выйдите из цикла for в этой точке и перейдите к следующему элементу в цикле for (... но если я продолжу ошибки для 10 различных ссылок, то для выхода из всей программы ...)

заранее спасибо

ответ

0

Вашего ключа сохранить в области catching exceptions. В общем, вы должны использовать что-то вроде:

while True: 
    try: 
     # Your code 
    except requests.exceptions.ConnectionError: 
     pass 

Если вам нужно продолжать запускать скрипт после появления нескольких исключений - использование кортежей, то есть ваша линия с except должна выглядеть except (request.exceptions.ConnectionError, requests.exceptions.TimeoutError).

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