Подтвердить что ты не робот

Почему argparse дает мне список в списке?

Я просто заметил поведение в argparse, которое озадачило меня (предположим, что я никогда раньше не использовал его для немого списка файлов):

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('multi', action='append', nargs='+')
print(parser.parse_args())

Это дает мне результат:

~$ ./testargs.py foo bar baz
Namespace(multi=[['foo', 'bar', 'baz']])
~$ 

Я ожидал, что multi будет ['foo', 'bar', 'baz'], а не список в списке. As-is, мне придется захватить args.multi[0] перед обработкой, что не очень важно, но похоже на уродливую бородавку, и я хотел бы понять, почему она там.

Я делаю что-то глупо в add_argument, или это просто неизбежная причуда?

4b9b3361

Ответ 1

Вы вызываете

parser.add_argument('multi', action='append', nargs='+')

И он принимает все аргументы и добавляет как один элемент в многостраничном списке.

Если вы хотите, чтобы это были отдельные элементы, просто не используйте append

parser.add_argument('multi', nargs='+')

Из документов

'append' - Здесь хранится список и добавляется каждое значение аргумента в список. Это полезно, если нужно указать параметр несколько раз. Пример использования:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])