在python方法中重试

时间:2019-05-06 14:47:30

标签: python

这是标准的语言中立方法

import logging

logger = logging.getLogger(__file__)

class SomeClass(object):
    max_retry = 2

    def get(self, key):
        try:
            return self.__get_value(key)
        except Exception:
            logger.error("Exception occured even after retrying...")
            raise

    def __get_value(self, key, retry_num=0):
        try:
            return self.connection().get(key)
        except Exception:
            logger.error("Exception occured")
            if retry_num < self.max_retry:
                retry_num += 1
                logger.warning("Retrying!!! Retry count - %s", retry_num)
                self.__get_value(key, retry_num)
            else:
                raise

有没有更好的 pythonic 方式?

1 个答案:

答案 0 :(得分:1)

更清洁的方法是不更改类的状态,因为它仅针对函数调用重试(多次调用该方法时,当前实现无法按预期工作)。我更喜欢使用重试装饰器(成功时为带有中断的循环)作为

...
@retry(n_times=2, catch=Exception)
def get (self, key):
    ...