python / python/cpython

Argparse: inconsistent default handling between `nargs` values

Aberta
#132,717 6 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

docs stdlib type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
36k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece reproduzindo o exemplo com argparse e compare o tratamento padrão de nargs='?' e nargs='+'. Rastreie o ponto de entrada do processamento de argumentos de argparse para ver onde a conversão de tipos difere e, em seguida, verifique se os valores padrão fornecidos são convertidos de forma consistente para ambas as formas e preservam os valores parseados esperados.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
cli
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.