Ich arbeite an einem einfachen Git/Redmine Leim Skript, aber ich habe einige Schwierigkeiten mit optionalen Argumenten mit dem Python argparse
Modul.Wie mache ich ein argparse-Argument optional, wenn Subparser verwendet werden?
Mit dem folgenden Code:
import argparse
class MyClass:
def StartWork(self, issueNumber, **kwargs):
if issueNumber is None:
issueNumber = input("please enter an issue number: ")
else:
print("issue number detected")
print(issueNumber)
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='MyClass-command', help='Command to perform')
subparsers.required = True
startWorkParser = subparsers.add_parser('startwork', help='Command to begin work on a new branch')
startWorkParser.add_argument("issuenumber", type=int, help="The issue number used to create a local branch based on the specified issue number", nargs='?', default=None)
startWorkParser.set_defaults(func=MyClass.StartWork)
# Parse the arguments to make sure we have all the information requried to actually do something.
args = parser.parse_args()
mc = MyClass()
try:
args.func(mc, **vars(args))
except AssertionError as e:
print("Error: "+str(e))
# Parse the arguments to make sure we have all the information required to actually do something.
args = parser.parse_args()
ich einen Anruf wie folgt erwartet:
python MyClass.py startwork
... in den Benutzer zu führen, dass eine Ausgabenummer aufgefordert. Stattdessen erhalte ich:
Traceback (most recent call last):
File "C:\Projects\RedmnieGlue\MyClass.py", line 23, in <module>
args.func(mc, **vars(args))
TypeError: StartWork() missing 1 required positional argument: 'issueNumber'
Warum ist die nargs='?'
hier nicht vorherrschend?
bearbeiten
Wenn ich es so nennen:
python MyClass.py startwork -h
ich dieses:
usage: class1.py startwork [-h] [issuenumber]
positional arguments:
issuenumber The issue number used to create a local branch based on the
specified issue number
optional arguments:
-h, --help show this help message and exit
..., die (auf der Basis der []
um issuenumber
) schlägt Ich es ist Verständnis, dass ein optionales Argument ist, aber etwas g verhindert, dass es so funktioniert, wie ich es erwarte. Etwas mit meiner Verwendung von subparsers
und Aufruf von Methoden mit dem Arg-Parser vielleicht zu tun?
Ich kann diesen Code ohne Fehler ausführen. –
(1) Es gibt einen Syntaxfehler in 'def StartWork (...)' (fehlender abschließender Doppelpunkt). (2) Die Fehlermeldung stimmt nicht mit dem angezeigten Code überein (z. B. gibt es keine 'Main'-Funktion). Daher wird in der vereinfachten Version nicht angezeigt, was mit Ihrem Code falsch ist. – poke
Es war ein Versuch, den ursprünglichen Code in ein praktikables Beispiel zu zerlegen. Ich werde es reparieren, damit es eine komplette Arbeitslösung ist ... –