Python和Urllib。如何处理网络异常?
问题描述:
我正在使用包urllib
和urllib.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
答
我建议你使用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)
谢谢你的回答。在'urlopen'函数工作的时候,'try'也可以工作吗?我的意思是,如果在下载期间连接丢失了? – Ezhno
您指定连接()应检查连接是否已建立,因此此函数在开始时仅运行一次,返回一个值并停止。如果你担心文件正确下载,你应该检查[这个答案](https://*.com/questions/987876/how-to-know-if-urllib-urlretrieve-succeeds)(并可能使用的urllib2) – Roxerg