Skip to main content
 首页 » 编程设计

python之如何在 Python 中可靠地处理网络数据

2025年05月04日19soundcode

我正在使用以下代码从网站获取数据:

time_out = 4 
 
def tryconnect(turl, timer=time_out, retries=10): 
    urlopener = None 
    sitefound = 1 
    tried = 0 
    while (sitefound != 0) and tried < retries: 
        try: 
            urlopener = urllib2.urlopen(turl, None, timer) 
            sitefound = 0 
        except urllib2.URLError: 
            tried += 1 
    if urlopener: return urlopener 
    else: return None 

[...]

urlopener = tryconnect('www.example.com') 
if not urlopener: 
    return None 
try: 
    for line in urlopener: 
        do stuff 
except httplib.IncompleteRead: 
    print 'incomplete' 
    return None 
except socket.timeout: 
    print 'socket' 
    return None 
return stuff 

有没有一种方法可以处理所有这些异常,而无需每次都使用这么多样板代码?

谢谢!

请您参考如下方法:

您也可以在第一个函数中避免一些样板代码:

time_out = 4 
 
def tryconnect(turl, timer=time_out, retries=10): 
    for tried in xrange(retries): 
        try: 
            return urllib2.urlopen(turl, None, timer) 
        except urllib2.URLError: 
            pass 
    return None 

第二个:

urlopener = tryconnect('www.example.com') 
if urlopener: 
    try: 
        for line in urlopener: 
            do stuff 
    except (httplib.IncompleteRead, socket.timeout), e: 
        print e 
        return None 
else: 
    return None