【问题标题】:ambiguous option error with optparseoptparse 的模棱两可的选项错误
【发布时间】:2018-01-31 10:26:26
【问题描述】:

请说明为什么下面的代码给出了错误,尽管两者都表示相同的选项。

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.

【问题讨论】:

    标签: python optparse


    【解决方案1】:

    没有关于此的真实文档,但您可以查看the source code 看看会发生什么。

    简而言之,optparse 将检查给定的参数是否彼此之间不太接近。

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

    在您的情况下,--currencies--currency--curr 开头,因此当您要求解析 --curr optparse 时,不能说您是想说 --currency 还是 --currencies

    【讨论】:

    • 我想作为一种粗略的解决方法,您还可以添加 --curr(可能还有 --curre--curren--currenc)作为别名。但我认为这是一个错误。
    【解决方案2】:

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

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

    现在 -filter、-file、-f、-fi、-fil、-filt、-filte 将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多