optparse模糊选项错误排查:同选项别名为何触发歧义报错?
为啥用
--curr会报模糊选项的错? 这个问题其实是optparse的部分匹配规则在搞事情——它允许用户输入选项的前缀来快速调用,但有个硬性要求:这个前缀必须能唯一对应到一个选项,不能同时匹配多个不同的选项别名。
看你代码里的场景:你给同一个选项加了三个别名:--currencies、--currency、--ccy。当你输入--curr时,optparse会扫描所有已定义的选项,结果发现:
--currencies的前4个字符是curr,能匹配上--currency的前4个字符也是curr,同样能匹配上
这下optparse彻底懵了,它搞不清你到底想调用哪个别名对应的选项,于是直接抛出了"ambiguous option"的错误。
解决办法有这两种:
- 使用更长的唯一前缀:比如输入
--curre(前5个字符),这时候只有--currency能匹配上;或者干脆直接输入完整的选项名,比如--currencies、--currency或者--ccy - 调整选项别名:如果非要支持
--curr作为有效前缀,那得修改别名设置,比如把其中一个长别名换成不会和curr前缀重叠的名字,或者只保留一个长选项,从根源上避免前缀撞车的情况
你可以自己测试验证下:
parser.parse_args(["--curre", "CHF"]) # 只会匹配--currency,正常运行 parser.parse_args(["--cc", "CHF"]) # 只会匹配--ccy,也没问题
内容的提问来源于stack exchange,提问作者Vinu Natrajan
相关产品推荐
相关产品推荐

