【发布时间】:2019-04-30 15:10:12
【问题描述】:
使用 argparse,在将参数添加到解析器后,有什么方法可以更新参数的“选择”选项? Argparse documentation 对更新选择没有太多帮助
import argparse
parser = argparse.ArgumentParser()
choices_list = ['A', 'B']
parser.add_argument('arg1', choices=choices_list)
# The list of choices now changes
choices_list = ['A', 'C', 'D']
# Some code to update 'arg1' choices option ?
parser.???
我尝试将“parser.add_argument”与新的“choices_list”一起使用,但它会创建重复的参数。
使用 Python 3.7
【问题讨论】:
-
发生这种情况时,您是否有理由不构建全新的解析器?如果它是由函数构建的,则可以将可以更改的内容作为参数提供。
-
除非您多次使用解析器(可能调用
parse_known_args,并在调用之前更新choices_list或再次parse_args),否则将参数添加到直到你知道choices_list的最终值。参数解析器通常是相当静态的,在您实际执行任何类型的 I/O 之前就已完全定义。 -
@CharlesDuffy 我没有理由不能构建一个新的解析器。我只是觉得修改一个属性比重新创建一个全新的对象更干净。
-
@chepner 也许我没有为此使用正确的工具,但我有一个交互式 shell(使用 cmd2),并且某些选项的选择取决于以前的操作。我事先不知道我将要展示什么,但是当交互式 shell 启动时我需要有一些默认选择