web-dev-qa-db-ja.com

Python ConfigParser:オプションの存在を確認しています

PythonのConfigParserを使用して構成ファイルを作成しています。セクションに特定のオプションが定義されているかどうかを確認し、定義されている場合は値を取得します。オプションが定義されていない場合は、特別な動作なしで続行したいだけです。これを行うには2つの方法があるようです。

if config.has_option('Options', 'myoption'):
    OPTION = config.get('Options', 'myoption')

または:

try:
    OPTION = config.get('Options', 'myoption')
except ConfigParser.NoOptionError:
    pass

ある方法が他の方法よりも優先されますか? ifの行数は少ないですが、多くの場合、try/exceptの方がPython的であると考えられていることをときどき読みました。

30
user1272534

Try/exceptとif-conditionの間の選択は、あいまいな線です。

  1. 例外が非常にまれであると思われる場合は、try/exceptを使用してください。
  2. 逆に、構成アイテムの欠落などの「予期される」例外は、通常の制御フローの一部であり、コードはそれを反映する必要があります。

明らかに優れた選択肢はありませんが、(2)のケースがあるように思えるので、if/thenを選択します。これは、「許可より許しを求めることが容易」の側面と構造の相対的な効率性を完全に無視します。

28
msw