New submission from Stig Johan Berggren <sti...@gmail.com>:

`get()` on a ConfigParser object behaves differently from `get()` on a section. 
The former raises an exception when the key does not exist and no fallback has 
been explicitly set. The latter returns None, with no option to raise an error 
for missing keys. I think this is confusing, and that both classes should have 
the same behaviour. I prefer raising an error, as it makes it easier to find 
errors such as typos in config files.

In addition, the docs state that the "parser-level `get` method
provides a custom, more complex interface, maintained for backwards
compatibility". The SectionProxy `get` method internally uses the parser-level 
`get`, so it seems unlikely that it is only maintained for backwards 
compatibility.

My proposed change is not backwards compatible, as any code that relies on a 
None being returned when a key does not exist would have to make this explicit 
through the fallback argument in `get`.

Here is the current behaviour in the latest build (3.8.0a0):

>>> import configparser
>>> c = configparser.ConfigParser()
>>> c.add_section('spam')
>>> c['spam'].get('eggs') # Returns None
>>> c['spam']['eggs']
Traceback (most recent call last):
  ...
KeyError: 'eggs'
>>> c.get('spam', 'eggs')
Traceback (most recent call last):
  ...
configparser.NoOptionError: No option 'eggs' in section: 'spam'
>>>

----------
components: Library (Lib)
messages: 322448
nosy: Stig Johan Berggren
priority: normal
severity: normal
status: open
title: configparser: SectionProxy.get is silent on missing options
type: behavior

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34242>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to