从finally块python中的try块中访问变量

问题描述 投票:0回答:1

在Github和stackoverflow的帮助下,我编写了日志装饰器来测量函数的执行时间,如果函数没有执行则引发异常。代码是:

def log(logger):
    def log_decorator(function):
        def wrapper(*args, **kwargs):
            try:
                start_time = time.time()
                logger.info('Starting function -' + function.__name__)
                return function(*args, **kwargs)
            except Exception as err:
                logger.exception(err)
                raise
            finally:
                end_time = time.time()
                logger.info('End function - ' + function.__name__)
                logger.info('Execution time %s milliseconds', (end_time-start_time)*1000)
        return wrapper
    return log_decorator

我有几个问题:

  1. 在从finally块访问start_time时,可能会在赋值警告之前引用局部变量。怎么解决?
  2. 例外有空加薪。这是好习惯吗?
python try-catch python-decorators
1个回答
0
投票
  1. 不要让start_time全球化。如果要在包装器外部访问它,请在包装器外部声明它。
  2. 这没关系,虽然我个人更喜欢明确提出错误。
  3. 这取决于你想用它做什么。
© www.soinside.com 2019 - 2024. All rights reserved.