使用optparse时出现了模糊的选项错误。

4
请说明为什么下面的代码会出错,尽管两者都指示了相同的选项。
In [3]: parser = optparse.OptionParser()

In [4]: parser.add_option("--currencies", "--currency", "--ccy")
Out[4]: <Option at 0x7f113e6c4488: --currencies/--currency/--ccy>

In [5]: parser.parse_args(["--curr", "CHF"])
Usage: ipython [options]

ipython: error: ambiguous option: --curr (--currencies, --currency?)
An exception has occurred, use %tb to see the full traceback.
3个回答

2

关于这个问题没有真正的文档,但是您可以查看源代码来了解发生了什么。

简单地说,optparse将检查给定的参数是否彼此太接近。

如果两个或多个参数以相同的字符串开头(例如foofoobarfoofoo,它们都以foo开头),则会引发AmbiguousOptionError

在您的情况下,--currencies--currency--curr开头,因此当您请求解析--curr时,optparse无法确定您想要使用--currency还是--currencies


2
我想作为一种粗略的解决方法,您也可以添加 --curr(以及可能的 --curre--curren--currenc)作为别名。但我会称其为错误。 - tripleee

2
如果您使用“argparse”而不是“optparse”,那么您可以添加“allow_abbrev=False”属性来忽略此错误。

0

将两个选项的所有缩写添加起来,例如对于-filter和-file:

parser.add_argument('-filter', '-file', '-f', '-fi', '-fil', '-filt', '-filte')

现在-filter,-file,-f,-fi,-fil,-filt,-filte都可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接