diff options
author | Robert Collins <rbtcollins@hp.com> | 2015-08-13 23:11:35 (GMT) |
---|---|---|
committer | Robert Collins <rbtcollins@hp.com> | 2015-08-13 23:11:35 (GMT) |
commit | ac37ba0742b1eb794eca7b6fd95a1ffecc9b6333 (patch) | |
tree | 12115ccf8e8807ae4a111a4d1057c3350c57ff7b /Lib/configparser.py | |
parent | 4ce4f974da6dd67c0701454453420988624241d8 (diff) | |
download | cpython-ac37ba0742b1eb794eca7b6fd95a1ffecc9b6333.zip cpython-ac37ba0742b1eb794eca7b6fd95a1ffecc9b6333.tar.gz cpython-ac37ba0742b1eb794eca7b6fd95a1ffecc9b6333.tar.bz2 |
Issue #21159: Improve message in configparser.InterpolationMissingOptionError.
Patch from Ćukasz Langa.
Diffstat (limited to 'Lib/configparser.py')
-rw-r--r-- | Lib/configparser.py | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py index 4ee8307..dcb7ec4 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -241,12 +241,9 @@ class InterpolationMissingOptionError(InterpolationError): """A string substitution required a setting which was not available.""" def __init__(self, option, section, rawval, reference): - msg = ("Bad value substitution:\n" - "\tsection: [%s]\n" - "\toption : %s\n" - "\tkey : %s\n" - "\trawval : %s\n" - % (section, option, reference, rawval)) + msg = ("Bad value substitution: option {!r} in section {!r} contains " + "an interpolation key {!r} which is not a valid option name. " + "Raw value: {!r}".format(option, section, reference, rawval)) InterpolationError.__init__(self, option, section, msg) self.reference = reference self.args = (option, section, rawval, reference) @@ -264,11 +261,11 @@ class InterpolationDepthError(InterpolationError): """Raised when substitutions are nested too deeply.""" def __init__(self, option, section, rawval): - msg = ("Value interpolation too deeply recursive:\n" - "\tsection: [%s]\n" - "\toption : %s\n" - "\trawval : %s\n" - % (section, option, rawval)) + msg = ("Recursion limit exceeded in value substitution: option {!r} " + "in section {!r} contains an interpolation key which " + "cannot be substituted in {} steps. Raw value: {!r}" + "".format(option, section, MAX_INTERPOLATION_DEPTH, + rawval)) InterpolationError.__init__(self, option, section, msg) self.args = (option, section, rawval) @@ -384,8 +381,9 @@ class BasicInterpolation(Interpolation): def _interpolate_some(self, parser, option, accum, rest, section, map, depth): + rawval = parser.get(section, option, raw=True, fallback=rest) if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rest) + raise InterpolationDepthError(option, section, rawval) while rest: p = rest.find("%") if p < 0: @@ -410,7 +408,7 @@ class BasicInterpolation(Interpolation): v = map[var] except KeyError: raise InterpolationMissingOptionError( - option, section, rest, var) + option, section, rawval, var) if "%" in v: self._interpolate_some(parser, option, accum, v, section, map, depth + 1) @@ -444,8 +442,9 @@ class ExtendedInterpolation(Interpolation): def _interpolate_some(self, parser, option, accum, rest, section, map, depth): + rawval = parser.get(section, option, raw=True, fallback=rest) if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rest) + raise InterpolationDepthError(option, section, rawval) while rest: p = rest.find("$") if p < 0: @@ -482,7 +481,7 @@ class ExtendedInterpolation(Interpolation): "More than one ':' found: %r" % (rest,)) except (KeyError, NoSectionError, NoOptionError): raise InterpolationMissingOptionError( - option, section, rest, ":".join(path)) + option, section, rawval, ":".join(path)) if "$" in v: self._interpolate_some(parser, opt, accum, v, sect, dict(parser.items(sect, raw=True)), |