2013-12-16 53 views
0

我试图在我的Python项目上阅读WWW站点。但是,如果我无法连接到Internet,代码将崩溃。如果在阅读网站的某个阶段没有任何连接,如何捕捉异常?如何正确阅读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来捕捉异常。下次请添加“崩溃”消息(异常堆栈跟踪) – 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:name'urllib'未定义。 – user2219896

+0

urllib是一个不同的库,你必须使用urllib3,检查我的答案。 – lv10

+0

似乎urllib3通过反复重试来处理这类事情,直到MaxRetryError发生。我会说lv10的答案。 – arandompenguin