Je souhaite dériver une classe de dictionnaire pour lui ajouter de la sémantique. Admettons, j'ai un dictionaire contenant des configurations, chaque config portant un nom, les noms etant les clés du dico. Pour être plus clair vis à vis de mon utilisateur, s'il me demande une clé qui n'est pas dans le dico, je veux lui soulever une exception plus explicite qu'un KeyError. Je procède ainsi :
Ca fonctionne bien, et ca fait le job voulu. Maintenant la question est : y a t il un moyen plus propre de faire cela ? Un moyen sans devoir réécrire le __getitem__ ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class UnexistantConfigError(KeyError): pass class Configs(dict): def __getitem__(self, i): try : return super(Configs, self).__getitem__(i) except KeyError : raise UnexistantConfigError("%s is an unknown configuration"%i) except Exception as e : raise e class ConfigA(): pass class ConfigB(): pass configs = Configs( { "1" : ConfigA, "2" : ConfigB } ) print(configs["3"]) ### OK : Raise UnexistantConfigError
Partager