TypeError: __init__() got an unexpected keyword argument 'Typ' in argparse
Hey also ich bin mit argparse, um zu versuchen und generieren einen vierteljährlichen Bericht. Dies ist, was der code sieht wie folgt aus:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',type=str,help="Enter a year in the format YYYY ")
args = parser.parse_args()
die Fehler ich erhalte, ist:
TypeError: init() got an unexpected keyword argument 'Typ'
soweit ich sagen kann von der argparse-Dokumentation-Typ ist einer der Parameter der add_argument Funktion. Ich habe versucht, das entfernen Sie diese und aktualisieren Sie den code :
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',help="Enter a year in the format YYYY ")
args = parser.parse_args()
Dann versuchte ich es mit: python scriptname.py -q 1 -y 2015
und es gibt mir die folgende Fehlermeldung:
Fehler:unrecognized Argumente: 1 2015
Ich weiß nicht warum, entweder. Kann bitte jemand etwas Licht in diese Schuppen.
Bitte formatieren Sie, dass code, es ist schwer zu Lesen - 4 Zeichen vor jeder Zeile wird es sein, einen code-block.
Warum sind Sie mit
später im code mache ich einen check, um zu sehen, wenn die Variablen gespeichert, die in argparse wahr sind. wenn Sie sind, führe ich einige code.
Das ist überhaupt nicht so, wie
Der Zweck der
Warum sind Sie mit
action='store_true'
? Was war Ihr Verständnis von dem, was Sie tun?später im code mache ich einen check, um zu sehen, wenn die Variablen gespeichert, die in argparse wahr sind. wenn Sie sind, führe ich einige code.
Das ist überhaupt nicht so, wie
store_true
funktioniert, oder sogar, wie Wahrheit funktioniert in Python.Der Zweck der
store_true
ist, um den Wert zu speichern True
für die benannte variable. Die Angabe einer type
Wert für die gleiche option ist sinnlos und nicht zulässig.InformationsquelleAutor Big_VAA | 2015-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was
action="store_true"
bedeutet, dass, wenn die als argument auf der Befehlszeile dann einTrue
Wert sollte gespeichert werden, in der parser. Was Sie wirklich wollen, ist zum speichern des bestimmten Jahres (als string) und Viertel (als int).Wenn Sie angeben
action='store_true
argparse ist intern instanziieren eines_StoreAction
Instanz, deren Konstruktor nicht akzeptierentype
parameter (da es immer ein boolean (True/False)). Sie können nicht liefernaction="store_true"
und " Typ " zur gleichen Zeit.InformationsquelleAutor Sebastian
Den
argparse
Dokumentation ist nicht so detailliert wie es sein könnte (aber immer noch mehr Informationen als viele Benutzer aufnehmen kann).Insbesondere die tatsächlichen Informationen, die ein argument benötigt, variiert mit
action
.Einen
store_true
Aktion keine Parameter (d.h. nargs=0). Der default-Wert istFalse
, und wenn verwendet, wird das Attribut gesetztTrue
.Wenn Sie möchten, dass der Benutzer geben Sie eine dieser vier zahlen, die ich würde vorschlagen, mit
https://docs.python.org/3/library/argparse.html#choices hat ein ähnliches Beispiel.
Die Beispiele in https://docs.python.org/3/library/argparse.html#action geben eine ziemlich gute Vorstellung davon, welche Parameter mit jedem action-Klasse übernimmt.
Es ist ein Python-Fehler/Problem diskutieren Verbesserung entweder der Dokumentation oder der Fehlermeldung, wenn unnötige Parameter werden in der Funktion. So wie es da steht, ist es der Python-Unterklasse-definition, die Ausgabe der Fehlermeldung.
Interessant, so die "optionalität" Geschmack " gebaut ist in, keine Notwendigkeit zu tun
nargs='?'
zum Beispiel, das offenbar Konflikte mit built-in/ - Standard-design.Die Basis
Action
Klasse hat 2 Parameter und 8 keyword-Parameter. Aber für die 'store_true' Unterklasse_StoreTrueAction
Unterklasse, nur 3 von diesen keywords werden in Ihrer__init__
, und nur diehelp
Sinn macht. Vererbung gibt eine Menge Flexibilität, aber manchmal macht genaue Dokumentation schwer.argparse
docs aufrequired
kann helfen, docs.python.org/2/library/argparse.html#requiredInformationsquelleAutor hpaulj