2016-08-24 87 views
1

我對覆盆子pi3上的python腳本有一些問題。覆蓋在覆盆子pi上的python腳本3

我發送一個http請求,很少腳本在請求函數上停止,並且永遠不會退出它。

代碼:

params = json.dumps({"toto: tata"}).encode('utf8') 
head = {'content-type': 'application/json'} 
req = urllib.request.Request('http://www.toto.com', data = params, headers = head) 
try: 
    response = urllib.request.urlopen(req) # <- here the problem 

except: 
    print("TCP_IP: may not connected to the internet") 

有關信息,我使用python3.4和OS是Raspbian。

並經過幾次試驗:

-The問題似乎大部分時間在凌晨2點(GMT + 2)(互聯網服務提供商的更新?)

-I通過樹莓連接到互聯網一個集線器。如果我從樞紐拔掉樹莓。沒有問題,腳本幾秒鐘後引發異常。但是如果我從互聯網上拔掉hub。腳本停留(對於操作系統,它始終連接到互聯網)。

回答

1

看起來像沒有超時給urlopen它永遠不會超時(見here)。如果你給超時應該解決你的問題。

response = urllib.request.urlopen(req, timeout=20) 

在sidenode上:最好是捕獲特定的異常而不是所有的異常,你也會看到ZeroDivisionError,你不想在那裏捕捉。

+0

好的,謝謝,但爲什麼在拔掉樹莓時出現異常,而不是在集線器與互聯網斷開連接時出現異常? –

+0

拔掉樹莓時,操作系統嘗試啓動互聯網連接時會發出錯誤。當只有集線器被拔出時,看起來好像不會中斷連接,操作系統認爲一切正常。 – syntonym