Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python上重试decorator_Python_Decorator_Retrying - Fatal编程技术网

在Python上重试decorator

在Python上重试decorator,python,decorator,retrying,Python,Decorator,Retrying,我正在尝试使用重试装饰器。它工作得很好,但当达到最大重试次数时,会出现异常柚木。如何避免此异常从这种情况下很好地返回,或者如何在发生这种情况时返回值 import random from retrying import retry @retry( wait_fixed = 500, stop_max_delay = 2000 ) def _do_something_unreliable(): actual = random.randint(0, 10) expected = 1

我正在尝试使用重试装饰器。它工作得很好,但当达到最大重试次数时,会出现异常柚木。如何避免此异常从这种情况下很好地返回,或者如何在发生这种情况时返回值

import random
from retrying import retry

@retry( wait_fixed = 500, stop_max_delay = 2000 )
def _do_something_unreliable():
    actual = random.randint(0, 10)
    expected = 11
    print actual
    print expected
    print '=' *30
    if actual != expected:  # retry does not succeed
        raise IOError( "Broken" )

_do_something_unreliable()
结果是:

3
11
==============================
7
11
==============================
2
11
==============================
5
11
==============================
Traceback (most recent call last):
  File "/home/itaybz/Documents/newKlara/infra/__stam.py", line 15, in <module>
    _do_something_unreliable()
  File "/home/itaybz/.local/lib/python2.7/site-packages/retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
  File "/home/itaybz/.local/lib/python2.7/site-packages/retrying.py", line 212, in call
    raise attempt.get()
  File "/home/itaybz/.local/lib/python2.7/site-packages/retrying.py", line 247, in get
    six.reraise(self.value[0], self.value[1], self.value[2])
  File "/home/itaybz/.local/lib/python2.7/site-packages/retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
  File "/home/itaybz/Documents/newKlara/infra/__stam.py", line 13, in _do_something_unreliable
    raise IOError( "Broken" )
IOError: Broken
6
11
==============================

Process finished with exit code 1 
3
11
==============================
7.
11
==============================
2.
11
==============================
5.
11
==============================
回溯(最近一次呼叫最后一次):
文件“/home/itaybz/Documents/newKlara/infra/__stam.py”,第15行,在
_做些不可靠的事
文件“/home/itaybz/.local/lib/python2.7/site-packages/retrying.py”,第49行,包装为
返回重试(*dargs,**dkw)。调用(f,*args,**kw)
文件“/home/itaybz/.local/lib/python2.7/site packages/retrying.py”,调用中的第212行
提升尝试。获取()
get中第247行的文件“/home/itaybz/.local/lib/python2.7/site packages/retrying.py”
六.重新释放(自值[0]、自值[1]、自值[2])
文件“/home/itaybz/.local/lib/python2.7/site packages/retrying.py”,第200行,在调用中
尝试=尝试(fn(*args,**kwargs),尝试次数,False)
文件“/home/itaybz/Documents/newKlara/infra/\uuuuu stam.py”,第13行,不可靠的事情
引发IOError(“断开”)
IOError:断开
6.
11
==============================
进程已完成,退出代码为1

这就是应该发生的事情。它到达stop\u max\u delay,因此它停止重试,您将得到调用函数的实际结果。您可以非常轻松地将调用包装在try/except中。或者查看源代码“重试”“重试”并不是很复杂-您可以使用自己的重试来实现所需的行为。我不想将其扭曲为“重试”和“除非”,因为我想在多个函数中使用它。这将是一个不干净的解决方案。重试库已关闭。正如该链接所示,您可以使用
坚韧性
,也可以尝试使用包的可怕名称IMHO。我正在使用
韧性
,我没有使用
opnieuw
,但它看起来很不错。我感到惊讶的是,没有更广泛地采用这些方法,即使是
坚韧
也“只有”2800颗星。也只是我的意见,但我会使用一个包,似乎有体面的通过之前推出自己的。毕竟,这就是开源的美妙之处。这就是应该发生的事情。它到达stop\u max\u delay,因此它停止重试,您将得到调用函数的实际结果。您可以非常轻松地将调用包装在try/except中。或者查看源代码“重试”“重试”并不是很复杂-您可以使用自己的重试来实现所需的行为。我不想将其扭曲为“重试”和“除非”,因为我想在多个函数中使用它。这将是一个不干净的解决方案。重试库已关闭。正如该链接所示,您可以使用
坚韧性
,也可以尝试使用包的可怕名称IMHO。我正在使用
韧性
,我没有使用
opnieuw
,但它看起来很不错。我感到惊讶的是,没有更广泛地采用这些方法,即使是
坚韧
也“只有”2800颗星。也只是我的意见,但我会使用一个包,似乎有体面的通过之前推出自己的。毕竟,这就是开源的魅力所在。