python argparse 默认参数与给定参数
python argparse default arguments versus given arguments
使用python 3.8 argparse:
def_value= 'whatever'
argParser.add_argument ("-w", "--whatever", type=str, nargs=1, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print (args.whatever)
如果我调用我的程序传递带有值的选项 -w,args.whatever 是一个列表。我的意思是:
myprog -w just_a_test
[just_a_test]
但是,我什么都不传递,默认参数是一个字符串。
myprog
whatever
这很烦人,我的意思是,我必须在使用它之前测试 args.whatever 的类型;
如果它是一个字符串,就把它当作字符串使用;如果它是一个列表,我必须将它用作 args.whatever[0],你看到了吗?
处理此类事情的最佳方法是什么?
PS:我认为它特定于 3.x,因为我记得 2.x 一直返回字符串。
您是否尝试删除 nargs 选项?
使用n_args参数会将值包装在一个列表中,因此,有两个选项:
1.
删除 nargs 参数。
def_value= 'whatever'
argParser.add_argument("-w", "--whatever", type=str, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print(args.whatever)
argparse 默认只允许一个参数,所以在这种情况下,无论是否传递参数,你总是得到一个字符串,当你试图传递超过 1 个值时,你会得到一个错误。
2.wrap def_value 列表:
def_value= ['whatever']
argParser.add_argument("-w", "--whatever", type=str, nargs=1, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print(args.whatever)
现在默认值和传入值都将是一个包含单个字符串的列表,并且当您传递超过 1 个值时也会引发错误。
以上两种解决方案应该可以实现相同的目标,具体取决于您喜欢哪一种
使用python 3.8 argparse:
def_value= 'whatever'
argParser.add_argument ("-w", "--whatever", type=str, nargs=1, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print (args.whatever)
如果我调用我的程序传递带有值的选项 -w,args.whatever 是一个列表。我的意思是:
myprog -w just_a_test
[just_a_test]
但是,我什么都不传递,默认参数是一个字符串。
myprog
whatever
这很烦人,我的意思是,我必须在使用它之前测试 args.whatever 的类型; 如果它是一个字符串,就把它当作字符串使用;如果它是一个列表,我必须将它用作 args.whatever[0],你看到了吗?
处理此类事情的最佳方法是什么?
PS:我认为它特定于 3.x,因为我记得 2.x 一直返回字符串。
您是否尝试删除 nargs 选项?
使用n_args参数会将值包装在一个列表中,因此,有两个选项:
1.
删除 nargs 参数。
def_value= 'whatever'
argParser.add_argument("-w", "--whatever", type=str, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print(args.whatever)
argparse 默认只允许一个参数,所以在这种情况下,无论是否传递参数,你总是得到一个字符串,当你试图传递超过 1 个值时,你会得到一个错误。
2.wrap def_value 列表:
def_value= ['whatever']
argParser.add_argument("-w", "--whatever", type=str, nargs=1, default=def_value, help="Whatever. Defaults to %s" % def_value)
args= argParser.parse_args()
print(args.whatever)
现在默认值和传入值都将是一个包含单个字符串的列表,并且当您传递超过 1 个值时也会引发错误。
以上两种解决方案应该可以实现相同的目标,具体取决于您喜欢哪一种