Python和Urllib。如何处理网络异常?

Python和Urllib。如何处理网络异常?

问题描述:

我正在使用包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。

替换如果,那么它下面的所有东西只能运行一次。

if connection() == True: 
    Download() 

另外,连接()函数可能是这样的:

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

谢谢你的回答。在'urlopen'函数工作的时候,'try'也可以工作吗?我的意思是,如果在下载期间连接丢失了? – Ezhno

+1

您指定连接()应检查连接是否已建立,因此此函数在开始时仅运行一次,返回一个值并停止。如果你担心文件正确下载,你应该检查[这个答案](https://*.com/questions/987876/how-to-know-if-urllib-urlretrieve-succeeds)(并可能使用的urllib2) – Roxerg

我建议你使用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)