Переменная доступа в блоке try из блока python - PullRequest
0 голосов
/ 26 апреля 2019

С помощью 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. На локальную переменную можно ссылаться до предупреждения о назначении при доступе к start_time из блока finally.Как ее решить?
  2. Исключение имеет пустой рейз.Это хорошая практика?

1 Ответ

0 голосов
/ 26 апреля 2019
  1. Не делайте start_time глобальным. Если вы хотите получить доступ к нему вне оболочки, объявите его вне оболочки.
  2. Это не имеет значения, хотя я лично предпочитаю явно выдавать ошибку.
  3. Это зависит от того, для чего вы хотите его использовать.
...