Python: Это - невоспитанность для повышения исключений в __ init __?

Возможно, необходимо рассмотреть Повышение. Мультииндекс , хотя примечание, что это немного слишком тяжело взвешивается.

111
задан krizajb 25 June 2018 в 15:58
поделиться

5 ответов

Вызов исключений в __ init __ () абсолютно нормально. Другого хорошего способа обозначить состояние ошибки в конструкторе нет, и в стандартной библиотеке есть много сотен примеров, в которых построение объекта может вызвать исключение.

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

145
ответ дан 24 November 2019 в 03:04
поделиться

Я не вижу причин, по которым это должно быть плохим тоном.

Напротив, одна из вещей, которые, как известно, работают хорошо, в отличие от возврата кодов ошибок, - это что коды ошибок обычно не могут возвращаться конструкторами. Так что, по крайней мере, в таких языках, как C ++, создание исключений - единственный способ сигнализировать об ошибках.

11
ответ дан 24 November 2019 в 03:04
поделиться

Стандартная библиотека говорит:

>>> f = file("notexisting.txt")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'notexisting.txt'

Также я действительно не вижу причин, по которым это следует считать плохим тоном.

5
ответ дан 24 November 2019 в 03:04
поделиться

Думаю, это идеальный случай для встроенного исключения ValueError .

3
ответ дан 24 November 2019 в 03:04
поделиться

Я согласен со всем из вышеперечисленного.

На самом деле нет другого способа сигнализировать о том, что что-то пошло не так при инициализации объекта, кроме создания исключения.

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

Классы с побочными эффектами (например, те, которые работают с сетью или графикой) могут вызвать ошибку в init, если (например) сетевое устройство недоступно или объект холста не может быть записан. Мне это кажется разумным, потому что часто вы хотите узнать об условиях отказа как можно скорее.

2
ответ дан 24 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: