2011-03-22 104 views
1
网络数据

我使用下面的代码从一个网站的数据:如何可靠地处理在Python

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 

有没有一种方法,我可以处理所有这些异常,而不必每次都有太多的样板代码?

谢谢!

回答

6

可避免在第一功能过于一些样板代码:

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 
+0

感谢您的回答,由C来(你很可能已经猜到通过使用0作为虚假:)我慢慢学习如何编写pythonic代码。 – Kami 2011-03-22 17:14:24