2013-12-16 2 views
0

Я попытался прочитать WWW-сайт в моем проекте Python. Однако, если я не могу подключиться к Интернету, произойдет сбой кода. Как можно поймать исключение, если в какой-то момент чтения сайта нет соединения?Как правильно читать www-сайт?

import sys 
import time 
import urllib3 

# Gets the weather from foreca.fi. 
def get_weather(url): 
    http = urllib3.PoolManager() 
    r = http.request('GET', url) 
    return (r.data) 

time = time.strftime("%Y%m%d") 
url = "http://www.foreca.fi/Finland/Kuopio/Saaristokaupunki/details/" + time 
weather_all = get_weather(url) 
print(weather_all) 
+1

ummm использовать предложение try/except? –

+2

Я вполне уверен, что это не «сбой» - это может вызвать исключение. И это будет ответ: вам нужен блок try-except-block, чтобы поймать исключение. В следующий раз, пожалуйста, добавьте сообщение «Crash» (Исключительная трассировка стека) – sphere

+0

Как в стороне, вы планировали фактически использовать значение 'time'? – tripleee

ответ

1

Я проверил ваш код без связи, если нет связи с чем он будет поднимать и MaxRetryError («Поднятая, когда максимальное количество повторных попыток превышено.»), Так что вы можете обработать исключение что-то вроде:

try: 
    # Your code here 
except urllib3.exceptions.MaxRetryError: 
    # handle the exception here 

Еще одна вещь, которую вы можете сделать - это использовать тайм-аут и делать что-то особенное, когда время истекает, так что у вас есть дополнительный контроль. который в каком-то смысле поднял это сообщение о том, что он достиг максимального значения

Также рассмотрите возможность работы с requests library.

1

Я полагаю urllib3 бы throw в URLError исключение, если нет маршрута к указанному серверу (то есть подключение к Интернету теряется), поэтому, возможно, вы могли бы использовать просто try catch? Я не особенно хорошо разбираюсь в urllib3, но для urllib это будет примерно так:

E.g.

try: 
    weather_all = get_weather(url) 
except urllib.error.URLError as e: 
    print "No connection to host" 
+0

Хм. Я получил urllib3.exception.MaxRetryError: и во время обработки вышеуказанного исключения я получил NameError: имя 'urllib' не определено. – user2219896

+0

urllib - это другая библиотека, вам нужно использовать urllib3, проверить мой ответ. – lv10

+0

Кажется, что urllib3 обрабатывает подобные вещи, повторяясь снова и снова, пока не возникнет MaxRetryError. Я бы сказал, отвечаю с ответом lv10. – arandompenguin

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