gpt4 book ai didi

python - plac 可选参数的默认值和非默认值

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:53 25 4
gpt4 key购买 nike

我的目标是使用 plac 在命令行中运行脚本,所有参数都是可选的并具有默认值。

不带参数:python my_script.py。它运行完美。

带参数:python my_script.py -r "foobar"。我收到 NoneType 异常,这表明正在传递默认值而不是自定义值。

def my_function(param1=None, param2=3, param3=1, param4=None):
...

def main(p1: ("param1", 'option', 'r'), p2: ("param2", 'option', 's'), p3: ("param3", 'option', 't'), p4: ("param4", 'option', 'u')):
my_function(p1, p2, p3, p4)

if __name__ == '__main__':
import plac; plac.call(main)

当我尝试在主函数中添加默认参数时也失败了:

(p1: ("param1", 'option', 'r')=None, ...)

或者在plac调用函数中:

plac.call(main(p1=None, ...)

docs 中找不到任何提及或示例。要么。

编辑1:

将代码更改为:

def main(p1=("param1", 'option', 'r'), p2=("param2", 'option', 's'), p3=("param3", 'option', 't'), p4=("param4", 'option', 'u')):

我收到以下错误:

python my_script.py -r "foobar"
usage: my_script.py [-h] [arg1] [arg2] [arg3] [arg4]
my_script.py: error: unrecognized arguments: -r

对于长参数:

python my_script.py param1 "foobar"
TypeError: Expected 'param1' of type <str>. Got <class 'tuple'>

编辑2:

我最终使用了click library而不是普拉克。并且它正在工作。

import click

@click.command()
@click.option('-r', '--param1', default=None)
...
def my_function(param1, ...):
...

if __name__ == '__main__':
my_function()

最佳答案

def my_function(param1=None, param2=3, param3=1, param4=None):

看起来不错。但是,在主标题中,我认为您并没有尝试给出默认参数

def main(p1: ("param1", 'option', 'r'), p2: ("param2", 'option', 's'), p3: ("param3", 'option', 't'), p4: ("param4", 'option', 'u')):  

您可以传递类似以下内容:

def main(p1= ("param1", 'option', 'r'), p2= ("param2", 'option', 's')):

关于python - plac 可选参数的默认值和非默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53664202/

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