TypeError: __init __ () hat in argparse ein unerwartetes Schlüsselwortargument "type" erhalten

9

Hey, ich benutze argparse, um einen vierteljährlichen Bericht zu erstellen. So sieht der Code aus:

%Vor%

Der Fehler, den ich erhalte, ist:

  

TypeError: init () hat ein unerwartetes Schlüsselwort-Argument 'type'

erhalten

soweit ich das mit dem Dokumentationstyp argparse feststellen kann, ist einer der Parameter der Funktion add_argument. Ich habe versucht, dies zu entfernen und den Code zu aktualisieren:

%Vor%

Ich habe dann versucht, es mit python scriptname.py -q 1 -y 2015 auszuführen, und es gibt mir den folgenden Fehler:

  

Fehler: unerkannte Argumente: 1 2015

Ich weiß nicht, warum das auch so ist. Kann jemand bitte etwas Licht in diese Sache bringen?

    
Big_VAA 06.11.2015, 19:29
quelle

2 Antworten

12

Was action="store_true" bedeutet, ist, dass, wenn das Argument in der Befehlszeile angegeben wird, ein True -Wert im Parser gespeichert werden soll. Was Sie wirklich wollen, ist das angegebene Jahr (als String) und das Viertel (als Int) zu speichern.

%Vor%

Wenn Sie action='store_true angeben, pargarse intern eine Instanz von _StoreAction instanziiert, deren Konstruktor keinen Parameter type akzeptiert (da es immer ein boolescher Wert (True / False) ist). Sie können action="store_true" und 'type' nicht gleichzeitig angeben.

    
Sebastian 06.11.2015 19:43
quelle
2

Die argparse -Dokumentation ist nicht so detailliert wie sie sein könnte (hat aber immer noch mehr Informationen, als viele Benutzer aufnehmen können).

Insbesondere die tatsächliche Information, die ein Argument benötigt, variiert mit action .

%Vor%

Eine store_true -Aktion benötigt keine Parameter (d. h. nargs = 0). Der Standardwert ist False , und falls verwendet, wird das Attribut auf True gesetzt.

Wenn Sie möchten, dass der Benutzer eine dieser vier Zahlen angibt, würde ich vorschlagen,

zu verwenden %Vor%

Ссылка hat ein ähnliches Beispiel.

Die Beispiele in Ссылка geben eine gute Vorstellung davon, welche Parameter die einzelnen Aktionsklassen haben.

Es gibt einen Python-Bug / ein Python-Problem, bei dem entweder die Dokumentation oder die Fehlermeldung verbessert wird, wenn in der Funktion unnötige Parameter angegeben werden. So wie es ist, ist es die Python-Unterklasse-Definition, die die Fehlermeldung ausgibt.

    
hpaulj 06.11.2015 19:47
quelle

Tags und Links