【问题标题】:Python argparse accepts arguments not explicitly definedPython argparse 接受未明确定义的参数
【发布时间】:2019-09-14 03:00:07
【问题描述】:

我正在使用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`

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

【问题讨论】:

  • Yes.
  • 如果你使用的是 Python 3.5+,看起来你可以turn it off

标签: python argparse


【解决方案1】:

通常情况下,人们会在发布问题几分钟后找到问题的答案。

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

这之前在here 处被报告为错误。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2021-07-15
    • 2013-07-02
    • 2017-02-24
    • 2020-08-08
    • 2017-12-22
    • 2015-01-22
    相关资源
    最近更新 更多