Python ConfigParser: Checking for option existence

I'm using Python's ConfigParser to create a configuration file. I want to check if a section has a particular option defined and, if it does, get the value. If the option isn't defined, I just want to continue without any special behavior. There seem to be two ways of doing this.

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

Or:

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

Is one method preferred over the other? The if involves less lines, but I've occasionally read that try/except is considered more pythonic in many cases.

Answers


The choice between try/except and if-condition is a fuzzy line.

  1. If you expect the exception to be quite rare, use try/except as it more closely models thinking
  2. Conversely, "expected" exceptions like a configuration item missing, are part of the normal flow of control and the code should reflect that.

There is no clearly superior choice, but it sounds like you've got a case of (2) so I'd opt for if/then. This completely ignores aspects of Easier to ask Forgiveness Than Permission and the relative efficiencies of the structures.


Need Your Help

How to compile tests with SBT without running them

scala sbt build-tools

Is there a way to build tests with SBT without running them?

Difference between capture and passing an argument in lambda functions

c++ c++11 lambda function-pointers

I understand the lambda function and the purpose of it in c++ 11. But i do not understand the difference between "Capturing the value" and "Passing an argument".