Mejores prácticas para estructurar excepciones de módulos en Python3
Supongamos que tengo un proyecto con una estructura de carpetas como esta.
/project
__init__.py
main.py
/__helpers
__init__.py
helpers.py
...
El módulohelpers.py
define alguna excepción y contiene algún método que genera esa excepción.
# /project/__helpers/helpers.py
class HelperException(Exception):
pass
def some_function_that_raises():
raise HelperException
Por otro lado mimain.py
El módulo define sus propias excepciones y métodos de importación que pueden generar una excepción dehelpers.py
.
# /projects/main.py
from project.__helpers.helpers import some_function_that_raises
class MainException(Exception):
pass
Ahora, no quiero que los usuarios tengan que hacerfrom project.__helpers.helpers import HelperException
si quieren atrapar esa excepción. Tendría más sentido poder importar la excepción desde el módulo público que lo está generando.
Pero no puedo solo movermeHelperException
amain.py
, lo que crearía una importación circular.
¿Cuál sería la mejor manera de permitir a los usuarios importar todas las excepciones demain.py
mientras que los criados en/__helpers
?