2011-10-17 4 views
4

私は、非Pythonユーザーが使用するいくつかのスクリプトを書いています。辞書があるConfigクラスがあり、KeyErrorのカスタム例外を発生させたいと考えています。辞書の値をチェックする際に例外を発生させるメソッドを書く以外に、これを行うためのエレガントな方法がありますか?ここで カスタム辞書を呼び出す方法KeyErrorメッセージ

class ConfigError(Exception): pass 

class Config: 
    def __init__(self): 
     self.cars = {'BMW': 'M5', 'Honda': 'Civic'} 

    def get_car(self, name): 
     try: 
      return self.cars[name] 
     except KeyError, e: 
      raise ConfigError("Car %s doesn't exist!!!" % name) 

conf = Config() 
print 'Car: %s' % conf.cars['BMW'] 
print 'Car: %s' % conf.cars['Mercedes'] 

は出力です:ここで

は一例です私は上記Config.get_car()などのメソッドを記述し、カスタム例外を発生させることができます知っている

Car: M5 
Traceback (most recent call last): 
    File "test.py", line 17, in ? 
    print 'Car: %s ' % conf.cars['Mercedes'] 
KeyError: 'Mercedes' 

が、私は思いますConfig.carsディクショナリに直接アクセスしようとしたときにカスタム例外を送出できるようにします。私は実際にはより多くの辞書が設定に含まれているので、そうしたいと思いますが、辞書の1つに対してカスタム例外を発生させるだけで、データがどのように一貫性のある(辞書として)かを維持したいと思います。

注:これはPython 2.4.4を使用しています。

答えて

5

これを行うことを検討してください。

class MyConfigDict(dict): 
    def __getitem__(self, key): 
     try: 
      return super(MyConfigDict, self).__getitem__(key) 
     except KeyError as e: 
      raise MyConfigError(e.message) 

このようなことは、あなた自身の拡張例外のすべてのアクセスをラップすることができます。

関連する問題