gpt4 book ai didi

Python optparse、默认值和显式选项

转载 作者:太空狗 更新时间:2023-10-29 22:08:22 25 4
gpt4 key购买 nike

采用以下相当标准的代码:

from optparse import OptionParser                         
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()

假设-x-f是互斥的:当-x-f都是明确存在,则应报告错误。

如何检测 -x 是否明确存在?即使不是,options 也会列出默认值。

一种方法是避免设置默认值,我宁愿不这样做,因为 --help 可以很好地打印默认值。

另一种方法是检查 sys.argv 中的 -x 实例,如果 -x 有多个名称,这也有点尴尬(即 --long-name)并且有不止一对相互排斥的选项。

有没有优雅的解决方案?

最佳答案

您可以使用回调通过 optparse 完成此操作。从您的代码构建:

from optparse import OptionParser

def set_x(option, opt, value, parser):
parser.values.x = value
parser.values.x_set_explicitly = True

opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1, action='callback',
callback=set_x)
options, args = opts.parse_args()
opts.values.ensure_value('x_set_explicitly', False)

if options.x_set_explicitly and options.f:
opts.error('options -x and -f are mutually exclusive')

我们暂时将此脚本称为 op.py。如果我执行 python op.py -x 1 -f,响应是:

Usage: op.py [options]

op.py: error: options -x and -f are mutually exclusive

关于Python optparse、默认值和显式选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com