Por lo general, veo este patrón al menos una vez en cada proyecto de Python en el que trabajo. Por ejemplo, en un proyecto Django, esto a menudo se agrega al final del archivo de configuración base:
try:
from .local_settings import *
except ImportError:
pass
También:
try:
import simplejson as json
except ImportError:
import json
Sin embargo, esto siempre me ha molestado un poco; ¿Qué pasa si el módulo se importa con éxito, pero luego se dispara ImportError? Por ejemplo, en el primer ejemplo, el local_settingsmódulo existe, pero luego local_settingstrata de importar un módulo inexistente.
¿Es esta la forma más segura de importar un módulo opcional, hay una mejor manera de lograr esta funcionalidad, o depende del contexto / uso (y si es así, ¿cuáles son las pautas para decidir cuándo usar este enfoque)?