Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2019 23:09:30

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проверять ли инициализацию класса?

скажите пожалуйста, является ли хорошей практикой заворачивать в блок try/except инициализацию класса?

Например, есть такой код:

 class Resulter:
    def __init__(self, results_path, logger):
        try:
            self.logger = logger
            self.results_path = results_path
        except Exception as e:
            error_msg = 'Resulter is not init: ' + ' :: ' + str(e)
            raise Exception(error_msg)

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

Офлайн

#2 Май 25, 2019 00:11:44

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

проверять ли инициализацию класса?

=) шикарно
бесмысленно полностью. И нету ни то что хорошей практики, нету даже плохой - это вообще не практика.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Май 25, 2019 11:58:19

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

проверять ли инициализацию класса?

JOHN_16
бесмысленно полностью.
а разве нет смсла в том, что в лог запишется конкретное место проблемы(проблема с logger или проблема с results_path)?

если бы я вместо представленного решения сделал так:
 try:
    resulter = Resulter(args)
except:
    blabla

то получил бы сообщение, в котором говорится, что проблема произошла где-то в классе Resulter, без всякого уточнения

Отредактировано zlodiak (Май 25, 2019 11:58:32)

Офлайн

#4 Май 25, 2019 14:46:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

проверять ли инициализацию класса?

zlodiak
У вас две операции присваивания под try. Покажите пример кода, когда присваивание может спровоцировать эксепшен. У вас уже есть объект. Присваиванием вы сохраняете адрес объекта в переменной, каким образом эта операция может стать причиной исключения?



Офлайн

#5 Май 25, 2019 14:51:11

Egorro13
Зарегистрирован: 2019-04-16
Сообщения: 105
Репутация: +  5  -
Профиль  

проверять ли инициализацию класса?

FishHook
zlodiakУ вас две операции присваивания под try. Покажите пример кода, когда присваивание может спровоцировать эксепшен.
Вчера еще прочитал тему - этим же вопросом задался, пришло в голову, что такое в принципе может быть, если используются сеттеры для свойств? Т.е. в сеттере может проверяться тип принимаемого значения, если не соответствует - выбрасывается исключение?

Офлайн

#6 Май 25, 2019 14:58:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

проверять ли инициализацию класса?

Egorro13
Можно в методе __setattr__ райзануть



Офлайн

#7 Май 25, 2019 23:54:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

проверять ли инициализацию класса?

zlodiak
а разве нет смсла в том, что в лог запишется конкретное место проблемы(проблема с logger или проблема с results_path)?
В проектах это решается другими средствами. Типа sentry и подобными.
zlodiak
то получил бы сообщение, в котором говорится, что проблема произошла где-то в классе Resulter, без всякого уточнения
ну так вы сделайте так что бы сообщение было информативное, трейсбек содержит всю информацию, включая конкретное место ощибки.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version