Python的argparse接受不完整选项名,如何开启严格参数解析?
问题解答
这不是argparse的bug,是其默认开启的长选项唯一前缀匹配特性:只要输入的双横杠开头的参数是某个已定义长选项的唯一前缀、不会和其他长选项产生歧义,就会自动匹配到对应完整选项。
如果你需要严格匹配完整长选项,在实例化ArgumentParser时添加allow_abbrev=False参数即可,该配置在Python 3.5及以上版本支持。
修改后的参考代码:
import argparse # 新增allow_abbrev=False关闭前缀匹配 argParser = argparse.ArgumentParser(description="Testing argparse.", allow_abbrev=False) argParser.add_argument( "--use-something", action="store_true", help="use something in addition (default: %(default)s)" ) cliArgs = argParser.parse_args() print(cliArgs)
你测试中出现的特殊现象原因如下:
- 单横杠开头的
-u报错,是因为前缀匹配仅对双横杠开头的长选项生效,你没有定义对应的短选项-u,所以直接识别为非法参数 --use-somethings报错,是因为该参数长度超过了已定义的--use-something,不属于其前缀,无法完成匹配
内容的提问来源于stack exchange,提问作者retif
相关产品推荐
相关产品推荐

