configparser: BasicInterpolation raises TypeError interpolating a value-less option
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
With allow_no_value=True and the default BasicInterpolation, interpolating a reference to a value-less option raises TypeError instead of resolving or raising a configparser error. ExtendedInterpolation treats the missing value as empty in the same situation.
import configparser
cfg = configparser.ConfigParser(allow_no_value=True)
cfg.read_string("[s]\na\nb = x%(a)sy\n")
cfg.get("s", "b")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cfg.get("s", "b")
~~~~~~~^^^^^^^^^^
File "../Lib/configparser.py", line 855, in get
return self._interpolation.before_get(self, section, option, value,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
d)
^^
File "../Lib/configparser.py", line 433, in before_get
self._interpolate_some(parser, option, L, value, section, defaults, 1)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "../Lib/configparser.py", line 474, in _interpolate_some
if "%" in v:
^^^^^^^^
TypeError: argument of type 'NoneType' is not a container or iterable
The same pattern with ExtendedInterpolation (b = x${s:a}y) returns "xy".
ExtendedInterpolation._interpolate_some guards this (if v is None: continue, added in gh-130941); BasicInterpolation._interpolate_some does not and reaches if "%" in v: with v set to None (Lib/configparser.py).
Observed on 3.16.0a0.
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
Linked PRs
- gh-153857
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans Lib/configparser.py, au niveau de BasicInterpolation._interpolate_some, et comparez sa gestion avec celle de ExtendedInterpolation._interpolate_some, comme indiqué dans le rapport. Confirmez que le cas d’une option sans valeur ne lève plus de TypeError et suit le comportement d’interpolation prévu ; la PR liée gh-153857 indique que le travail est déjà en cours.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100