Argparse com sub-analisador necessário

Estou usando o Python 3.4, estou tentando usarargparse com sub-analisadores e quero ter um comportamento semelhante ao do Python 2.x, onde, se não fornecer um argumento posicional (para indicar o sub-analisador / subprograma), receberei uma mensagem de erro útil. Ou seja, compython2 Receberei a seguinte mensagem de erro:

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

Estou definindo orequired atributo conforme sugerido emhttps://stackoverflow.com/a/22994500/3061818, no entanto, isso me dá um erro no Python 3.4.0:TypeError: sequence item 0: expected str instance, NoneType found - rastreio completo:

$ 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

Este é o meu programasubparser_test.py - adaptado dehttps://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)

Pergunta relacionada:Por que esse código argparse se comporta de maneira diferente entre Python 2 e 3?

questionAnswers(1)

yourAnswerToTheQuestion