list index out of range:using try except 给出不同的 result:Command 行解析器
list index out of range:using try except gives a different result:Command line parser
我正在尝试构建一个看起来像 "scriptName -s arg1 arg2 ... -d ..." 的 cli 解析器。所以我试图将 -s 之后的所有数据附加到列表中(最后附加到字典中)并 return 它。
以下是我使用的函数:
def split_data(cli_args):
dict_args = {}
local_list = []
for i in range(1,len(cli_args)):
if(cli_args[i] == '-s'):
try:
i = i + 1
while(cli_args[i] != '-d'):
print("while",(cli_args[i]))
local_list.append(cli_args[i])
i = i + 1
print("local_list",local_list)
dict_args.update({"options" : local_list})
except BaseException as err:
print(str(err))
break
print(dict_args)
return dict_args
结果给出:
while arg1
local_list ['arg1']
while arg2
local_list ['arg1', 'arg2']
list index out of range
{}
但是,如果您要将 while
循环(完整循环)包装在 try: except:pass
中,最终字典会保留数据,为什么?
while arg1
local_list ['arg1']
while arg2
local_list ['arg1', 'arg2']
list index out of range
{"options" : ['arg1', 'arg2']}
有没有更好的方法来解决这个问题,或者有更好的模块来处理命令行参数?
提前致谢。
我建议使用 python 的 argparse 模块。它确实做到了这一点以及更多。 https://docs.python.org/3/library/argparse.html.
您可以设置可选参数。布尔参数。 argument=value 像参数一样,甚至对它们做一些逻辑,比如聚合值。
但是,如果你真的想这样做:
listargs = False
dict_args = {}
lst = []
for i in cli_args:
if i == "-d":
listargs = True
if listargs:
lst.append(i)
if i == "-s":
listargs = False
dict_args["options"] = lst
lst = []
我正在尝试构建一个看起来像 "scriptName -s arg1 arg2 ... -d ..." 的 cli 解析器。所以我试图将 -s 之后的所有数据附加到列表中(最后附加到字典中)并 return 它。
以下是我使用的函数:
def split_data(cli_args):
dict_args = {}
local_list = []
for i in range(1,len(cli_args)):
if(cli_args[i] == '-s'):
try:
i = i + 1
while(cli_args[i] != '-d'):
print("while",(cli_args[i]))
local_list.append(cli_args[i])
i = i + 1
print("local_list",local_list)
dict_args.update({"options" : local_list})
except BaseException as err:
print(str(err))
break
print(dict_args)
return dict_args
结果给出:
while arg1
local_list ['arg1']
while arg2
local_list ['arg1', 'arg2']
list index out of range
{}
但是,如果您要将 while
循环(完整循环)包装在 try: except:pass
中,最终字典会保留数据,为什么?
while arg1
local_list ['arg1']
while arg2
local_list ['arg1', 'arg2']
list index out of range
{"options" : ['arg1', 'arg2']}
有没有更好的方法来解决这个问题,或者有更好的模块来处理命令行参数? 提前致谢。
我建议使用 python 的 argparse 模块。它确实做到了这一点以及更多。 https://docs.python.org/3/library/argparse.html.
您可以设置可选参数。布尔参数。 argument=value 像参数一样,甚至对它们做一些逻辑,比如聚合值。
但是,如果你真的想这样做:
listargs = False
dict_args = {}
lst = []
for i in cli_args:
if i == "-d":
listargs = True
if listargs:
lst.append(i)
if i == "-s":
listargs = False
dict_args["options"] = lst
lst = []