Python: Нужно ли добавлять блок исключений при импорте встроенных модулей? - PullRequest
0 голосов
/ 23 мая 2018

Это вопрос новичка.

Рассмотрим приведенный ниже блок кода:

try:
    import os
except ImportError as error:
    print " Unable to import buildin module os"
    raise error

Нужно ли добавлять блок исключений при импорте встроенных модулей Python (как выше? Что будетпричина сбоя при импорте встроенного модуля?

Может кто-нибудь указать на документацию по питону, объясняющую эту теорию?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Есть несколько причин, по которым код в вопросе в значительной степени бессмысленен.

Прежде всего, он не добавляет никакой новой информации.Ошибка только что исправлена.Распечатка не добавляет никакой новой информации, которой нет в ошибке и трассировке стека.

Во-вторых, как указывает @ RemcoGerlich , вы спрашиваете конкретно о встроенных модулях.Было бы разумно отреагировать на отсутствие дополнительного модуля, найдя замену или отключив функции программы, но вы ничего не можете сделать в ответ на поломку вашей платформы.

Ошибка встроенного импортаникогда не упоминается в документации явно, насколько мне известно.Импорт встроенных модулей может завершиться неудачей по любой из причин, по которым может произойти сбой обычного импорта.Встроенные файлы представляют собой набор файлов Python и C-расширений (по крайней мере, в CPython).Изменение, замена, удаление любого из этих файлов может привести к чему угодно - от сбоев импорта до того, что интерпретатор вообще не запускается.Установка неправильных прав доступа к файлу может иметь аналогичный эффект.

0 голосов
/ 23 мая 2018

Короткий ответ, нет.

Более длинный ответ: ваша программа не сильно помогает в обнаружении исключений, с которыми вы ничего не можете сделать.Некоторый файл отсутствует - вы можете сообщить об этом, возможно, спросить пользователя снова, или, возможно, известно, что это иногда случается, и вы можете дать четкое сообщение об ошибке, объясняющее почему.Некоторые вызовы API не выполняются - возможно, их можно повторить, или кому-то нужно получить сообщение о том, что служба не работает.

Но что-то столь же простое, как это ... Во-первых, этого никогда не происходит (я никогдавидел import os провал за двадцать лет).Во-вторых, если это не удастся, ваша программа ничего не сможет сделать (если это не удастся, вероятность того, что print также не удастся)Кроме того, в документации библиотеки не говорится, что это может произойти.

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

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