On 7 May, 21:05, Tim Chase <python.l...@tim.thechases.com> wrote: > With a normal dictionary, I can specify a default fallback value > in the event the requested key isn't present: > > d = {} > print d.get(42, 'Some default goes here') > > However, with the ConfigParser object, there doesn't seem to be > any way to do a similar > > cp = ConfigParser(...) > # ... > print cp.get('MySection', 'MyValue', 'Some default goes here') > > that, in the event either "MySection" doesn't exist in the config > file, or "MyValue" doesn't exist within "MySection", it simply & > quietly returns my default. At the moment, I have to mimic this with > > try: > val = cp.get('MySection', 'MyValue') > except (NoSectionError, NoOptionError), e: > val = 'Some default goes here' > print val > > which is a real pain when you have multiple options, some using > various combinations of get(), getboolean(), getint(), or > getfloat(). Yes, I can write some cheap wrappers to do these, > but it feels like something that should be built-in. > > I've played with the DEFAULT, but that seems to just create its > own section that I have to *ask* for: > > cp.get('DEFAULT', 'MyValue') > > I've thumbed through the source to ConfigParser.py but don't see > any indication that it's possible to do what I'd like short of > wrapping all my cp.get*() calls in try/except blocks or creating > a forked version of ConfigParser.py locally. Is there anything > I'm missing, or a better workaround to this? > > Thanks, > > -tkc
Not convinced about this, but a quick "work-around" would be something like: def get_config(config, section, option, ctype=str, default=None): if default is None: ret = config.get(section, option) else: confdict = config.__dict__.get('_sections') ret = confdict.get(section).get(option, default) return ctype(ret) That should cover most exceptions and the get* functions..., just provide your own factory function to post-parse it... Of course, I'm probably missing something as usual... Anyway, Cheers, Jon. -- http://mail.python.org/mailman/listinfo/python-list