Podczas korzystania z czegoś takiego z argpara:
parser.add_argument("-option1", type=int, nargs=1, default=1, choices=xrange(1, 10), help="option 1 message")
Jeśli argument nie zostanie przekazany, args.option1 jest liczbą całkowitą. Jeśli zostanie przekazany argument, args.Option to lista.
Co oznacza, że muszę używać albo argt.option1 lub args.option1 [0]. Czy można tego uniknąć?
2 odpowiedzi
Jeśli ustawisz nargs
do liczby całkowitej, argument zawsze będzie listą, gdy określono. Możesz użyć '?'
zamiast tego, aby ustawić go do pojedynczej wartości lub domyślnie:
parser.add_argument(
"-option1", type=int, nargs='?', default=1,
choices=xrange(1, 10), help="option 1 message")
N
(Integer).N
Argumenty z linii poleceń zostaną zebrane razem do listy.[…]
'?'
. Jeden argument zostanie spożywany z linii poleceń, jeśli to możliwe, a wyprodukowano jako pojedynczy element . Jeśli nie ma argumentu wiersza polecenia, zostanie wytworzona wartość z domyślna wartość.
Kopalnia nacisk. prawdopodobnie chcesz ustawić const
, jak również, jeśli ktoś używa tylko -option1
na linii poleceń bez wartości następującej; Bez const
Wartość jest następnie ustawiona na None
. Wystarczy ustawić go w tej samej wartości co domyślnie:
parser.add_argument(
"-option1", type=int, nargs='?', default=1, const=1,
choices=xrange(1, 10), help="option 1 message")
Inną opcją jest , a nie Set nargs
:
parser.add_argument(
"-option1", type=int, default=1,
choices=xrange(1, 10), help="option 1 message")
Zwykle oznacza to prawie tak samo jak nargs='?'
:
Jeśli nie jest podana żadna argument słów kluczowych
nargs
, liczba spożywanych argumentów jest określona przez działanie. Ogólnie oznacza to, że jeden argument linii polecenia zostanie spożywany i zostanie wyprodukowany pojedynczy element (nie lista).
Z różnicą jest to, że argument jest pusty -option1
na linii poleceń nie jest dozwolone; No const
należy ustawić.
Próbny:
>>> from argparse import ArgumentParser
>>> parser = ArgumentParser()
>>> parser.add_argument(
... "-option1", type=int, nargs='?', default=1, const=1,
... choices=xrange(1, 10), help="option 1 message")
_StoreAction(option_strings=['-option1'], dest='option1', nargs='?', const=1, default=1, type=<type 'int'>, choices=xrange(1, 10), help='option 1 message', metavar=None)
>>> parser.parse_args(['-option1', '4']) # option with argument
Namespace(option1=4)
>>> parser.parse_args(['-option1']) # option with *no* argument
Namespace(option1=1)
>>> parser.parse_args([]) # option not specified
Namespace(option1=1)
>>> parser = ArgumentParser()
>>> parser.add_argument(
... "-option1", type=int, default=1,
... choices=xrange(1, 10), help="option 1 message")
_StoreAction(option_strings=['-option1'], dest='option1', nargs=None, const=None, default=1, type=<type 'int'>, choices=xrange(1, 10), help='option 1 message', metavar=None)
>>> parser.parse_args(['-option1', '4']) # option with argument
Namespace(option1=4)
>>> parser.parse_args([]) # option not specified
Namespace(option1=1)
>>> parser.parse_args(['-option1']) # option with *no* argument
usage: [-h] [-option1 {1,2,3,4,5,6,7,8,9}]
: error: argument -option1: expected one argument
Otrzymujesz listę, ponieważ ustawisz nargs=1
w argumentach do add_argument
. Jest to również opisane w Dokumenty:
Należy pamiętać, że
nargs=1
wytwarza listę jednego elementu. Jest to inne niż domyślne, w którym przedmiot jest wytwarzany sam.
Jeśli usuniesz nargs=1
, powinien wytworzyć pozycję na własną rękę zgodnie z pożądanym (z argumentu, jeśli zostanie podane, w przeciwnym razie z default
). Jeśli chcesz, aby numer opcjonalny (tj. Zezwalaj również na -option1
bez argumentu), użyj nargs='?'
i ustaw const
jako wartość domyślna w tej sprawie.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.