Argparse: inconsistent default handling between `nargs` values
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Beispiel mit argparse zu reproduzieren und vergleiche die Standardbehandlung für nargs='?' und nargs='+'. Verfolge den Einstiegspunkt der Argumentverarbeitung von argparse, um zu sehen, wo sich die Typkonvertierung unterscheidet, und überprüfe anschließend, dass angegebene Standardwerte für beide Formen konsistent konvertiert werden und die erwarteten geparsten Werte beibehalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- cli
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100