Python argparse接受未明确定义的参数

时间:2019-04-24 18:24:43

标签: python argparse

我正在使用argparse处理程序的命令行参数,但解析器似乎接受我未定义的参数。我已经用这个最小的例子重现了这个问题:

import argparse

def init():
    parse_args()
    exit()

def parse_args():
    parser = argparse.ArgumentParser(add_help = False)
    parser.add_argument("--kmers")
    parser.parse_args()

if __name__ == '__main__':
    init()

将此文件保存为a.py,然后运行:

python a.py --kmers /file.json

这正常退出;令人惊讶的是,以下内容也可以在没有解析器抱怨的情况下起作用:

python a.py --kmer /file.json

不应该这样,因为--kmer不是已定义的参数。但是,运行它会引发错误:

python a.py --kmersss /file.json

`kmers.py: error: unrecognized arguments: --kmerss`

在我看来,解析器接受一个参数,只要它是已经定义的东西的唯一前缀即可。是这样吗?

1 个答案:

答案 0 :(得分:0)

通常情况是,在发布问题分钟后找到答案。

此行为与解析器的allow_abbrev选项有关,该选项默认情况下设置为True。启用此功能后,只要解析器是已定义参数的无歧义子字符串,解析器就会愉快地接受任何传递的参数。

以前在here处将其报告为错误。