Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Argparse带有默认值的可选参数_Python_Argparse - Fatal编程技术网

Python Argparse带有默认值的可选参数

Python Argparse带有默认值的可选参数,python,argparse,Python,Argparse,不熟悉python和法语,因此对于任何英语错误,我深表歉意:)。 我正在做一些需要使用argparse的事情。 以下是我遇到问题的代码: mission.py 我试图找到一种方法,将n和file都设置为其他值,或者只设置其中的1。n为int,文件为str 下面是我希望使用以下命令获得的内容: python mission.py——创建2##预期结果>创建=[2,'world1.json'] python mission.py——创建world2.json#预期结果>创建=[1,'world2.j

不熟悉python和法语,因此对于任何英语错误,我深表歉意:)。 我正在做一些需要使用argparse的事情。 以下是我遇到问题的代码:

mission.py 我试图找到一种方法,将n和file都设置为其他值,或者只设置其中的1。n为int,文件为str

下面是我希望使用以下命令获得的内容:

python mission.py——创建2##预期结果>创建=[2,'world1.json']

python mission.py——创建world2.json#预期结果>创建=[1,'world2.json']

python mission.py——创建3 world2.json#预期结果>创建=[3,'world2.json']

当使用--create时(无论是否指定n/file),我都需要使用列表作为参数启动一个函数

我尝试了多种方法,多次阅读了argparse文档,但找不到方法


感谢您的帮助。

下面的代码返回所列用例的预期结果。我决定使用一个额外的函数来处理这个参数,因为程序必须接受int或字符串作为传递的第一个参数

在继续之前,我使用“try”块查看单个参数是否可以解析为int

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'),
                    help='Create a party of n player with mission parameters in file')
args = parser.parse_args()

def get_n_file(arg):
    if len(arg)==1:
        try:
            i = int(arg[0])
            result = int(arg[0]), 'world'+str(arg[0])+'.json'
        except:
            s = arg[0]
            result = 1, s
        return result
    elif len(arg)==2:
        return int(arg[0]), arg[1]

print(args.create)

n, f = get_n_file(args.create)

print(n, f)

更改为
add_参数('--create',nargs='+')
。解析后,自己决定如何处理
args.create
列表中的1个或多个字符串<代码>argparse未设置解码int和str类型的混合。为节省大量工作,请使用begins库@stevej,
如何开始
对这个规范有帮助?如何将此需求表示为函数的参数?进一步考虑后,我认为我可以提出一个自定义的
类型
函数和
操作
类,它可以满足您的需要,甚至可以逐段替换默认值。但在解析之后进行转换也同样容易。为什么不这样做,然后我可以建议如何使它成为解析器的一部分?编辑我的问题,添加我的目标是使用的--创建@使用
nargs='+'
的hpaulj无法满足我的需要。因为用户可以单独使用
--create
来创建一个使用默认列表[1,'world1.json]的参与方。在那之后,你建议我做的就是在之后解码列表?
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'),
                    help='Create a party of n player with mission parameters in file')
args = parser.parse_args()

def get_n_file(arg):
    if len(arg)==1:
        try:
            i = int(arg[0])
            result = int(arg[0]), 'world'+str(arg[0])+'.json'
        except:
            s = arg[0]
            result = 1, s
        return result
    elif len(arg)==2:
        return int(arg[0]), arg[1]

print(args.create)

n, f = get_n_file(args.create)

print(n, f)