2013-12-16 93 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