2010-04-26 23 views
53

urllib2'nin urlopen içindeki zaman aşımı parametresini kullanıyorum.urllib2'nin zaman aşımıyla mı ilgileniyorsunuz? - Python

urllib2.urlopen('http://www.example.org', timeout=1) 

Python'a, zaman aşımı süresi dolduğunda özel bir hata oluşması gerektiğini nasıl anlarım?


Herhangi bir fikir?

+1

Not: [. 'Timeout' parametresi sınırlamaz ne * toplam * bağlantı süresi ne * toplam * okuma (yanıt) zaman] (http://stackoverflow.com/a/32684677/4279) – jfs

cevap

87

except:'u kullanmak istediğiniz çok az örnek var. Bu hata ayıklamak zor olabilir herhangi istisna, yakalar yapmak ve istisnalar kullanmak için programı can sıkıcı yapabilirsiniz SystemExit ve KeyboardInterupt, .. çok basit haliyle

dahil yakalar, sen urllib2.URLError yakalamak olacaktır:

try: 
    urllib2.urlopen("http://example.com", timeout = 1) 
except urllib2.URLError, e: 
    raise MyException("There was an error: %r" % e) 

belirli hatayı yakalamak gerekir aşağıdaki kaldırdı bağlantı zaman aşımına:

import urllib2 
import socket 

class MyException(Exception): 
    pass 

try: 
    urllib2.urlopen("http://example.com", timeout = 1) 
except urllib2.URLError, e: 
    # For Python 2.6 
    if isinstance(e.reason, socket.timeout): 
     raise MyException("There was an error: %r" % e) 
    else: 
     # reraise the original error 
     raise 
except socket.timeout, e: 
    # For Python 2.7 
    raise MyException("There was an error: %r" % e) 
+5

URLError artık –

+0

@TalWeiss eklediğinden, Python 2.7.5 zaman aşımları urllib2.URLError tarafından yakalandı. – dbr

+0

@dbr Teşekkürler, üstelik “HttpError” olarak en az “reasontr (e, 'reason”) ve isinstance (e.reason, socket.timeout) olmalıdır. Python 2.6'da' reason' özelliği yoktur. –

15

Python 2.7.3 yılında:

import urllib2 
import socket 

class MyException(Exception): 
    pass 

try: 
    urllib2.urlopen("http://example.com", timeout = 1) 
except urllib2.URLError as e: 
    print type(e) #not catch 
except socket.timeout as e: 
    print type(e) #catched 
    raise MyException("There was an error: %r" % e)