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

时间:2019-04-26 00:45:13

标签: python try-catch python-decorators

借助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

我有几个问题:

    在从finally块访问 start_time 时,在分配警告之前可能会引用
  1. 局部变量。如何解决?
  2. 异常有空加薪。这是好习惯吗?

1 个答案:

答案 0 :(得分:0)

  1. 请勿将start_time设置为全局。如果要在包装器外部访问它,则在包装器外部声明它。
  2. 没关系,尽管我个人更喜欢明确地提出一个错误。
  3. 这取决于您要使用它的方式。