Argparse с обязательным подпарсером

Я использую Python 3.4, я пытаюсь использоватьargparse с подпарсерами, и я хочу иметь поведение, подобное тому, которое есть в Python 2.x, где, если я не предоставлю позиционный аргумент (чтобы указать подпарсер / подпрограмму), я получу полезное сообщение об ошибке. Т.е. сpython2 Я получу следующее сообщение об ошибке:

$ python2 subparser_test.py    
usage: subparser_test.py [-h] {foo} ...
subparser_test.py: error: too few arguments

Я устанавливаюrequired атрибут, как предлагается вhttps://stackoverflow.com/a/22994500/3061818Однако, это дает мне ошибку с Python 3.4.0:TypeError: sequence item 0: expected str instance, NoneType found - полный возврат:

$ python3 subparser_test.py    
Traceback (most recent call last):
  File "subparser_test.py", line 17, in <module>
    args = parser.parse_args()
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1717, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1749, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1984, in _parse_known_args
    ', '.join(required_actions))
TypeError: sequence item 0: expected str instance, NoneType found

Это моя программаsubparser_test.py - адаптированы изhttps://docs.python.org/3.2/library/argparse.html#sub-commands:

import argparse

# sub-command functions
def foo(args):
    print('"foo()" called')

# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
subparsers.required = True

# create the parser for the "foo" command
parser_foo = subparsers.add_parser('foo')
parser_foo.set_defaults(func=foo)

args = parser.parse_args()
args.func(args)

Связанный вопрос:Почему этот argparse-код ведет себя по-разному между Python 2 и 3?

Ответы на вопрос(1)

Ваш ответ на вопрос