Gestion des exceptions personnalisées dans Python moderne
En Python, la définition de classes d'exceptions personnalisées est essentielle pour gérer les erreurs et garantir la stabilité du code. L'approche appropriée pour ce faire a évolué au fil des versions de Python, et cet article explore les recommandations pour le « Python moderne », en se concentrant sur la compatibilité avec Python 2.5 et le respect des normes Python 2.6 et 3.*.
Déclaration d'exception personnalisée
L'avertissement de dépréciation dans Python 2.6.2 indique que la définition de l'attribut de message de BaseException est déconseillée. Selon le PEP-352, cet attribut avait une signification spécifique dans Python 2.5 qui est progressivement supprimée. Par conséquent, les exceptions personnalisées doivent éviter d'utiliser message comme nom d'attribut.
Au lieu de cela, il est recommandé de remplacer la méthode __init__ d'Exception, en passant le message souhaité en tant que paramètre. Cela permet d'accéder au message via la méthode __str__ ou __unicode__ de l'exception, qui est automatiquement appelée lorsque l'exception est convertie en chaîne.
Transmission de données supplémentaires
Pour inclure des données supplémentaires dans l'exception personnalisée, il est courant de transmettre des arguments supplémentaires à la méthode __init__. Ces arguments peuvent être stockés en tant qu'attributs d'instance de l'exception et accessibles selon les besoins. Dans Python 2, il est nécessaire d'appeler explicitement le constructeur de la superclasse en utilisant super() pour invoquer le constructeur de la classe de base.
Exemple
Un exemple plus détaillé d'une personnalisation exception :
class ValidationError(Exception): def __init__(self, message, errors): super().__init__(message) self.errors = errors
Dans cet exemple, l'exception ValidationError prend un message et un dictionnaire d'erreurs comme arguments. Le dictionnaire des erreurs peut contenir des informations supplémentaires sur l'erreur. L'accès à ces informations dans le code où l'exception est interceptée est désormais simple, par exemple :
try: # Code that may throw a ValidationError except ValidationError as e: print(f"Error: {e.message}") print(f"Errors: {e.errors}")
Bien que remplacer __init__ et __str__ puisse sembler plus compliqué, cela garantit la compatibilité avec toutes les versions de Python et fournit une méthode cohérente. d'accéder aux données d'exception.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!