2017-09-17 29 views
0

我正在使用包urlliburllib.request的簡單代碼是downloading a file over HTTP。除了我希望能夠處理可能發生的網絡問題之外,一切工作都很好。Python和Urllib。如何處理網絡異常?

  • 檢查計算機是否在線(連接到Internet)。只有在正確的情況下才能繼續。

  • 重新啓動文件的下載,如果在此期間,連接丟失或太糟糕。

我想,如果可能的話,使用盡可能少的軟件包。 這裏是我的實際代碼:

import urllib 
import urllib.request 
url = "http://my.site.com/myFile" 
urlSplited = url.split('/')[-1]; 
print ("Downloading : "+urlSplited) 
urllib.request.urlretrieve(url, urlSplited) 

要檢查連接etablished,我相信我能做到像

while connection() is true: 
    Download() 

但是會做下載很多次..

我正在研究Linux。

回答

0

替換如果,那麼它下面的所有東西只能運行一次。

if connection() == True: 
    Download() 

另外,連接()函數可能是這樣的:

try:  
    urllib.urlopen(url, timeout=5) 
    return True 
return False 
+0

謝謝你的回答。在'urlopen'函數工作的時候,'try'也可以工作嗎?我的意思是,如果在下載期間連接丟失了? – Ezhno

+1

您指定連接()應檢查連接是否已建立,因此此函數在開始時僅運行一次,返回一個值並停止。如果你擔心文件正確下載,你應該檢查[這個答案](https://stackoverflow.com/questions/987876/how-to-know-if-urllib-urlretrieve-succeeds)(並可能使用的urllib2) – Roxerg

1

我建議你使用try的組合,而和睡眠功能。像這樣:

import urllib 
import urllib.request 
import time 
url = "http://my.site.com/myFile" 
urlSplited = url.split('/')[-1]; 
try_again = True 
print ("Downloading : "+urlSplited) 

while try_again: 
    try: 
     urllib.request.urlretrieve(url, urlSplited, timeout = 100) 
     try_again = False 
    except Exception as e: 
     print(e) 
     time.sleep(600)