J'ai quelques questions sur les exceptions définies par l'utilisateur dans Python et comment elles devraient être organisées dans un projet complet.Python: Organisation d'exceptions définies par l'utilisateur dans un projet complet
J'ai un projet python assez complexe avec des sous-paquets qui a la structure (__init__.py
omis) suivante:
/docs (Documentation)
/apidocs (generated API documentation)
/askindex (my application package)
/test (Unit tests directory)
test_utils.py
... (more tests)
/workers (various worker classes)
communicators.py
processes.py
threads.py
utils.py
main.py (contains the starting point)
data_objects.py (various objects used all around the application)
settings.py (settings of the application)
README.txt
Je voudrais mettre en œuvre ma propre exception de les utiliser dans les modules du ' paquet de travailleurs pour des erreurs spécifiques.
Où dois-je placer ces exceptions? Je sais que je devrais avoir ma propre exception de base qui sous-classe la classe Exception standard et la sous-classe pour mes autres exceptions. Devrais-je créer un nouveau module 'exceptions' sous 'workers'? Mettre des classes d'exception dans le module dans lequel elles sont levées? Dans ce cas, où devrais-je mettre ma classe de base? Est-ce que ma structure de demande est appropriée?
Je suis nouveau à des exceptions en Python, donc s'il vous plaît excusez-moi si la réponse est évidente ...
Merci pour votre réponse rapide. Je n'avais pas pensé au module __init__.py. Je n'ai jamais vraiment su quoi mettre dedans sauf le paquet docstring et meta. Suivant votre exemple, l'exception serait-elle référencée comme food.RottenException? –
@Marc: oui. Un modèle commun pour les grands modules est de les diviser en modules séparés et d'avoir le paquet '__init __ .py' contenant les importations relatives pour relier les modules ensemble (souvent 'de xyz import *', avec xyz définissant '__all__'). Dans ce cas, c'est probablement pas applicable, vraiment. Vous pourriez vouloir importer des communicateurs, des processus, des threads, des utils, par exemple, tout comme 'os' importe' path' de sorte que 'import os' implique' import os.path'. –
@Marc: Suivant cet exemple 'food', un peu plus loin, la classe' Foodstuff' serait définie dans '__init __. Py', et' food.fruit' serait 'importé de la nourriture' et aurait alors' la classe Tomate (food.Foodstuff) '. Tant que vous êtes prudent et n'utilisez pas 'from food import Foodstuff', la référence circulaire est OK (voir [cet article sur effbot] (http://effbot.org/zone/import-confusion.htm#circular -importations)). –