在python方法中重试

在python方法中重试,python,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

这是标准的语言中立方法

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
导入日志
logger=logging.getLogger(_文件__)
类SomeClass(对象):
最大重试次数=2
def get(自身,密钥):
尝试:
返回self.\u获取值(键)
除例外情况外:
logger.error(“重试后仍发生异常…”)
提升
def u获取值(self、key、retry_num=0):
尝试:
返回self.connection().get(键)
除例外情况外:
logger.error(“发生异常”)
如果重试次数

有更好的pythonic方法吗?

更干净的方法是不更改类的状态,因为它只是为了函数调用而重试(当方法被多次调用时,当前的实现不会像预期的那样工作)。我更喜欢使用重试修饰符(作为成功时带中断的循环)作为:


用简单循环替换递归将是一个良好的开端。
...
@retry(n_times=2, catch=Exception)
def get (self, key):
    ...