Python 如何重试urllib2.urlopen n次

Python 如何重试urllib2.urlopen n次,python,python-2.5,Python,Python 2.5,我正在尝试实现一个装饰器来重试urllib2.urlopen n次。 我不能让装修工工作。当我运行它时,我得到以下错误: 回溯(最近一次呼叫最后一次): 文件“F:\retry\dec_class.py”,第60行,在 x、 getURLdata('127.0.0.1') TypeError:“非类型”对象不可调用 谁能帮我一下吗 import serial, urllib2, time from functools import wraps import xml.etree.cElement

我正在尝试实现一个装饰器来重试urllib2.urlopen n次。 我不能让装修工工作。当我运行它时,我得到以下错误: 回溯(最近一次呼叫最后一次): 文件“F:\retry\dec_class.py”,第60行,在 x、 getURLdata('127.0.0.1') TypeError:“非类型”对象不可调用

谁能帮我一下吗

import serial, urllib2, time
from functools import wraps

import xml.etree.cElementTree as ET
from xml.etree.cElementTree import parse

class Retry(object):

    default_exceptions = (Exception)
    def __init__(self, tries, exceptions=None, delay=0):

        self.tries = tries
        if exceptions is None:
            exceptions = Retry.default_exceptions
        self.exceptions = exceptions
        self.delay = delay

    def __call__(self, f):
        def fn(*args, **kwargs):
            tried = 0
            exception = None

            while tried <= self.tries:
                try:
                    return f(*args, **kwargs)
                except self.exceptions, e:
                    print "Retry, exception: "+str(e)
                    time.sleep(self.delay)
                tried += 1
                exception = e
                #if no success after tries, raise last exception
                raise exception
            return fn 


class getURL(object):

    @Retry(2 )
    def getURLdata(self, IPaddress):

        try:
            f = urllib2.urlopen(''.join(['http://', IPaddress]))
            f = ET.parse(f)

            return f

        except IOError, err:
            print("L112 IOError is %s" %err)
        except urllib2.URLError, err:
            print("L114 urllib2.URLError is %s" %err)
        except urllib2.HTTPError, err:
            print("L116 urllib2.HTTPError is %s" %err)
        except Exception, err :
            print("L118 Exception is %s" %err)


x = getURL()

x.getURLdata('127.0.0.1')
导入序列,urllib2,时间
从functools导入包装
将xml.etree.cElementTree作为ET导入
从xml.etree.cElementTree导入解析
类重试(对象):
默认_异常=(异常)
def uuu init uuuu(self,trys,exceptions=None,delay=0):
self.tries=尝试
如果无例外情况:
异常=重试。默认\u异常
self.exceptions=异常
self.delay=延迟
定义调用(self,f):
def fn(*args,**kwargs):
已尝试=0
异常=无

尝试时,您的
\uuu调用
方法不会返回
fn
。相反,它隐式返回
None
,因此None绑定到
getURLdata