Modification de KeyError dans une classe dérivée de dict
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 :
Code:
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 |
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__ ?