При работе над большими проектами я очень заинтересован в обнаружении и обработке ошибок. Я использую некоторые модули, которые пользователь может установить или не установить, поэтому мне нужно учитывать эту возможность.Динамическое обнаружение отсутствующих модулей (Python)
Я хотел бы знать, как определить, какие модули отсутствуют при попытке импортировать их. В настоящее время у меня есть набор try/except блоков, которые отслеживают ImportErrors и добавляют имена модулей, создающих ошибки, в список.
Текущий код:
errors = []
try:
import socket
except ImportError:
errors.append('socket')
pass
try:
import shutil
except ImportError:
errors.append('shutil')
try:
import urllib
except ImportError:
errors.append('urllib')
pass
if len(errors) > 0:
print colors.red + '[!] ' + colors.end + 'Error: The Following Module(s) Encountered Error(s): \n'
for i in range(len(errors)):
print '\t' + errors[i]
print colors.blue + '\n[*] ' + colors.end + 'Please Install/Reinstall the Listed Modules'
quit()
Этот метод, кажется, работает нормально, но я хотел бы способ, который будет занимать меньше общую комнату. Основная причина использования этого метода multi-try/except block заключается в том, что мне нужно определить, какой модуль имел проблемы с импортом.
Почему бы не использовать [надлежащую упаковку] (https://python-packaging-user-guide.readthedocs.org/en/latest/), так что 'pip' может позаботиться об установке зависимостей? Таким образом, вы переносите ответственность за управление зависимостями * вне * вашего кода и не должны беспокоиться о том, как обрабатывать ошибки. –