Задать вопрос

Исключение вызывается даже при его обработке?

Обрабатываю исключение

try:
    if not self._load_train_data:
        raise Exception('Some exception')
except Exception as ex:
    self.x = self._tensor_x()


Код завершается следующей ошибкой:

Traceback (most recent call last):
  File "/tmp/pycharm_project_751/predictors/houses_predictor.py", line 299, in _cook_x
    raise Exception('Some exception')
Exception: Some exception


Необходимо сделать так, чтобы исключение просто выполняло выражение в Exception, т. е.

self.x = self._tensor_x()
  • Вопрос задан
  • 100 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Что при обработке исключения может случиться другое исключение это как раз нормально. Ненормально, что всё это маскируется отлавливанием корневного класса Exception.

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

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

class NoTrainDataLoaded(Exception):
    pass

...
raise NoTrainDataLoaded("Call your_model_object.load_train_data first!")

...
try:
    ...
except NoTrainDataLoaded:
    logger.info("Train data not loaded yet, load default data...")
    my_model.load_train_data("mimimi-cats-and-dogs")
    continue


Если вдруг случится исключение, которое не упомянуто в except, то скрипт упадёт, и это хорошо. Пусть он не пытается делать какую попало реакцию на неясно какую ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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