【发布时间】:2023-10-07 12:12:02
【问题描述】:
是否有使用 Python 的 argparse 模块的最佳实践或样式指南?
我经常使用argparse,它很快就占用了相当多的行来处理所有配置。对于几乎所有我发现坚持接近PEP 8 会产生干净、可读的代码,但这里不是。最终的结果总是一段难看的代码,读起来很痛苦。
难读不是 Pythonic:
那么,是否有 PEP 或其他资源可以为如何更好地格式化此代码提供指导?
丑陋的样本(主要遵循 PEP 8):
parser = argparse.ArgumentParser(description='A nontrivial modular command')
subparsers = parser.add_subparsers(help='sub-command help')
parser_load = subparsers.add_parser('load', help='Load something somewhere')
parser_load.add_argument('--config',
help='Path to configuration file for special settings')
parser_load.add_argument('--dir', default=os.getcwd(),
help='The directory to load')
parser_load.add_argument('book', help='The book to load into this big thing')
parser_load.add_argument('chapter', nargs='?', default='',
help='Optionally specify a chapter')
parser_load.add_argument('verse', nargs='*',
help='Optionally pick as many verses as you want to'
' load')
parser_load.set_defaults(command='load')
parser_write = subparsers.add_parser(
'write', help='Execute commands defined in a config file')
parser_write.add_argument('config', help='The path to the config file')
parser_write.set_defaults(command='write')
parser_save = subparsers.add_parser(
'save',
help='Save this big thing for use somewhere later')
parser_save.add_argument('-n', '--name', default=None,
help='The name of the component to save')
parser_save.add_argument('path', help="The way out of Plato's cave")
parser_save.set_defaults(command='save')
...
args = parser.parse_args()
【问题讨论】:
-
查看
click: click.pocoo.org/5,通过装饰器获得更好的参数 -
除了在换行的位置不一致之外,我没有发现任何问题:您似乎只是在需要符合 80 个字符的地方换行,而不是在有助于可读性的地方.我不相信这不是题外话:基于意见,因为它会根据您的编码标准而有所不同。
-
@TemporalWolf 我可以看到,这就是为什么我询问是否存在标准,而不仅仅是关于如何格式化此代码的建议
-
也许还可以将
parser_X/parser_Y重命名为X_parser/Y_parser,这样并不是每一行都以parser和X/Y开头,这样可以更容易地区分。 -
我倾向于使用
required=False代替nargs='?'。如果 required 为 false,如果未指定,则值为 none,这使我的代码更易于阅读,因为我知道nargs的意思是“准备好用列表做某事”。
标签: python argparse code-formatting