特定类型的可选参数

时间:2017-04-28 05:57:50

标签: python-3.x argparse

当使用argparse时,如果选项可以采用可选参数,那么将如何处理,但必须是特定类型。例如,让我说我写了一个名为frob的工具,当给出-n选项时会截断一个文件,但是当提供一个数值时,它会截断到那个长度。

如果使用add_argument('-n', nargs='?', const=0),它将消耗下一个参数的任何内容,如果我使用add_argument('-n', nargs='?', type=int, const=0)它将尝试无论如何并且如果它不是整数则会失败。

1 个答案:

答案 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有一个不同的解析例程。它将整个命令行列表传递给选项,让它消耗它想要的东西并返回其余部分。