python / python/cpython

Argparse: inconsistent default handling between `nargs` values

Ouverte
#132,717 6 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

docs stdlib type-bug
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:
import argparse

parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter
)

day_names = ["mo", "tu", "we", "th", "fr", "sa", "su"]
days = [1, 2, 3, 4, 5, 6, 7]

def name_day(value):
    return day_names.index(value) + 1

parser.add_argument(
    '--day',
    type=name_day,
    default="mo",
    nargs='?',  
    help="pick a day",
)
args = parser.parse_args()
print(args.day)
Actual results:

The above code block will print the value 1. However, if we change the arguments to

    default=["mo"],
    nargs='+',

The code will print the value ["mo"]. So it seems type conversion does not happen for default arguments when nargs specifies multiple arguments.

Expected results:

The supplied default values are converted, irrespective of the value of nargs.

CPython versions tested on:

3.13, 3.10

Operating systems tested on:

Linux

Linked PRs
  • gh-132724

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple avec argparse et comparez la gestion par défaut de nargs='?' et nargs='+'. Suivez le point d’entrée du traitement des arguments de argparse pour voir où la conversion de type diffère, puis vérifiez que les valeurs par défaut fournies sont converties de manière cohérente pour les deux formes et préservent les valeurs parsées attendues.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
cli
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.