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

我的目标是使用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而不是plac。它正在工作。

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')):

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

无法注释掉涉及多行字符串的代码 - python

基本上,我很好奇这为什么会引发语法错误,以及如何用Python的方式来“注释掉”我未使用的代码部分,例如在调试会话期间。''' def foo(): '''does nothing''' ''' 参考方案 您可以使用三重双引号注释掉三重单引…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…