Обработка исключений в Python - PullRequest
1 голос
/ 13 декабря 2010

Какой лучший способ обработки исключений.

class SRException(Exception):
    default_exception = True

    def somefun1(email):
        try:
            user = somefun2(email)
        except Exception, e:
            raise SRException, ("could not find the email", e)

    def somefun2(email):
        try:
            user = User.objects.get(email = email)
        except Exception, e:
            raise SRException, ("could not find the user objecets",e )

Поэтому, когда происходит исключение, я получаю длинный список исключений

UserProfileException ('не удалось найти пользователь или объекты обслуживания », UserProfileException ('не удалось найти пользователь ', ServicesException (' мог не найти услугу », DoesNotExist ('Сервис, соответствующий запросу не существует. ',))))))))

Ошибки и приведенные выше примеры кода не совпадают. Но, думаю, я ясно изложил свою точку зрения.

Так что лучший способ обработки исключений. Я не должен поднимать это во всех исключениях. И я отправляю почту технической команде каждый раз, когда возникают исключения.

Ответы [ 3 ]

4 голосов
/ 13 декабря 2010

Ваш обработчик исключений слишком широкий, перехватывайте только те конкретные исключения , которые, как вы знаете, можно обработать . Нет смысла перехватывать исключение только для того, чтобы заключить его в другое исключение и повторно вызвать его; объект исключения несет Traceback, который покажет вам, по какому пути идет код. Просто дайте всплыть «Исключению» и поймайте его на таком уровне, чтобы вы могли восстановиться после исключения.

2 голосов
/ 13 декабря 2010

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

Немного покопавшись в sys.exc_info()[2], вы можете даже вывести полный список параметров и локальных объектов в каждом кадре стека,предоставит вспомогательному персоналу адрес электронной почты нарушителя.

1 голос
/ 13 декабря 2010

Прежде всего, никогда не проверяйте Exception! Всегда используйте правильный подтип, который вы на самом деле ожидаете.

Также не следует инкапсулировать уже полезные исключения в другие; и вообще используйте тип исключения в качестве идентификации того, что происходит. Тогда вы можете просто продолжать создавать (информативные) исключения на низком уровне и перехватывать их все отдельно на более высоком уровне, чтобы определить правильное сообщение об ошибке для конечного пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...