Найти - Пользователи
Полная версия: проверять ли инициализацию класса?
Начало » Python для новичков » проверять ли инициализацию класса?
1
zlodiak
скажите пожалуйста, является ли хорошей практикой заворачивать в блок 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)

с одной стороны - всё правильно, ведь ошибка может произойти в любом месте. но с другой стороны это избыточность и параноя
JOHN_16
=) шикарно
бесмысленно полностью. И нету ни то что хорошей практики, нету даже плохой - это вообще не практика.
zlodiak
JOHN_16
бесмысленно полностью.
а разве нет смсла в том, что в лог запишется конкретное место проблемы(проблема с logger или проблема с results_path)?

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

то получил бы сообщение, в котором говорится, что проблема произошла где-то в классе Resulter, без всякого уточнения
FishHook
zlodiak
У вас две операции присваивания под try. Покажите пример кода, когда присваивание может спровоцировать эксепшен. У вас уже есть объект. Присваиванием вы сохраняете адрес объекта в переменной, каким образом эта операция может стать причиной исключения?
Egorro13
FishHook
zlodiakУ вас две операции присваивания под try. Покажите пример кода, когда присваивание может спровоцировать эксепшен.
Вчера еще прочитал тему - этим же вопросом задался, пришло в голову, что такое в принципе может быть, если используются сеттеры для свойств? Т.е. в сеттере может проверяться тип принимаемого значения, если не соответствует - выбрасывается исключение?
FishHook
Egorro13
Можно в методе __setattr__ райзануть
JOHN_16
zlodiak
а разве нет смсла в том, что в лог запишется конкретное место проблемы(проблема с logger или проблема с results_path)?
В проектах это решается другими средствами. Типа sentry и подобными.
zlodiak
то получил бы сообщение, в котором говорится, что проблема произошла где-то в классе Resulter, без всякого уточнения
ну так вы сделайте так что бы сообщение было информативное, трейсбек содержит всю информацию, включая конкретное место ощибки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB