Если я хочу перехватывать и регистрировать (не вызывать) исключения, должен ли KeyboardInterrupt быть единственным возбужденным исключением? - PullRequest
1 голос
/ 21 июня 2019

В случае исключений я хочу, чтобы программа перехватила их, зарегистрировала их, а затем перешла к следующей итерации.Очевидно, что KeyboardInterrupt все еще следует вызывать, чтобы можно было остановить программу, но есть ли другие исключения, которые я должен вызвать?

Очень грубый пример кода ниже.Это декоратор, который ловит исключения и регистрирует их.В основном, у меня должны быть другие except дела?

def exception_logger(func):

    @wraps(func)
    def wrapper(*args, **kwargs):

        # Run as normal
        try:
            return func(*args, **kwargs)
        except KeyboardInterrupt:
            raise

        # Any other exception that occurs is logged
        except:
            log_file = 'example.txt'
            logger = logger_format(log_file)

            logger.exception(f'\nAn exception occurred with: {func.__qualname__}\n')
            print(f'\n\nAn exception occurred with: {func.__qualname__}\nView the log file for details.\n'.upper())

    return wrapper


Спасибо.

1 Ответ

1 голос
/ 22 июня 2019

Вместо черного списка (который может плохо стареть) вы должны просто ловить Exception вместо использования except:.Это исключает KeyboardInterrupt и другие, которые вы не должны подавлять.(Может быть, все в порядке, чтобы зарегистрировать их, но, похоже, вы все равно этого не хотите.) См. Также совет против except: pass, в частности для контекста.

...