Самый простой способ обработки случаев, когда вы не хотите, чтобы исключение распространялось, но все же предоставляло некоторую информацию об ошибке, состоит в том, чтобы всегда включать детали из исходного исключения в любое сообщение, которое вы печатаете:
try:
import settings
except ImportError as exc:
sys.stderr.write("Error: failed to import settings module ({})".format(exc))
Таким образом, вы получите ясное сообщение в общем случае (например, пользователь поместил свой файл настроек в неправильное место, или где-то произошла ошибка конфигурации, так что sys.path
не так), не скрывая полностьюдругие ошибки импорта, возникающие при выполнении модуля settings
.
Еще лучше, если при использовании модуля ведения журнала, регистрировать полную информацию об исключении (включая трассировку) как debug()
или info()
logging event.
Существуют и другие варианты, такие как поиск по подстроке if 'settings' not in str(exc): raise
или отделение местоположения модуля от его выполнения с помощью imp.find_module()
, но простого включения исходного сообщения об ошибке достаточно, чтобыпредотвратить худшие неприятности.