python教程—带有所需子解析器的Argparse-Python实用宝典

python教程—带有所需子解析器的Argparse

我使用的是python3.4,我尝试使用带有子解析器的argparse,我想要有一个类似于python2中的行为。如果我不提供位置参数(来指示子解析器/子程序),我将得到一个有用的错误消息。即。,使用python2,我将得到以下错误消息:

我使用的是python3.4,我尝试使用带有子解析器的argparse,我想要有一个类似于python2中的行为。如果我不提供位置参数(来指示子解析器/子程序),我将得到一个有用的错误消息。即。,使用python2,我将得到以下错误消息:

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

我正在按照

    $ 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#子命令:

    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)

相关问题:

回答

您需要给子解析器一个dest。

最近在相关的bug/问题中有一些活动

< a href = " https:> https://bugs.python.org/issue9253 < / >

更新

解决方案正在进行中:< A href="https://github.com/python/cpython/pull/3027" rel="noreferrer">https://github.com/python/cpython/pull/3027

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论