当使用argparse
时,如果选项可以采用可选参数,那么将如何处理,但必须是特定类型。例如,让我说我写了一个名为frob
的工具,当给出-n
选项时会截断一个文件,但是当提供一个数值时,它会截断到那个长度。
如果使用add_argument('-n', nargs='?', const=0)
,它将消耗下一个参数的任何内容,如果我使用add_argument('-n', nargs='?', type=int, const=0)
它将尝试无论如何并且如果它不是整数则会失败。
答案 0 :(得分:0)
你不能在argparse
中做出这种区分。 sys.argv
字符串严格依据nargs
和位置分配给Action。如果您指定
parser.add_argument('-n', nargs='?', type=int, const=0)
然后-n 1 --other
将起作用,-n one --other
将失败,因为int('one')
会产生错误。这同样适用于choices
测试。 Action必须使用它给出的字符串,否则会失败。在分配字符串之后应用测试(如果有的话),而不是之前。
optparse
有一个不同的解析例程。它将整个命令行列表传递给选项,让它消耗它想要的东西并返回其余部分。