我希望能够从命令行像这样调用python脚本:
error-chain
然后能够在我的程序中操作这些代码(输入所需的数量,例如,可以输入10个元组)?
到目前为止,我能够做类似事情的唯一方法就是这样称呼:
failure
或:
python ./pyProg (1, 2) (2, 3)
,它们以字符串形式出现。 实现我想要做的最好的方法是什么?
谢谢
答案 0 :(得分:2)
您可以将元组作为字符串传递,并使用ast.literal_eval()
将其转换为实际的元组:
from sys import argv
from ast import literal_eval
for x in argv[1:]:
tup = literal_eval(x)
print(tup, type(tup))
可以这样称呼:
$ python ./pyProg.py "(1, 2)"
(1, 2) <class 'tuple'>
处理错误:
如果传递的字符串不是有效的表达式,则可以同时引发SyntaxError和ValueError。因此,将以上内容包装在try/except
中可能是安全的:
from sys import argv
from ast import literal_eval
for x in argv[1:]:
try:
tup = literal_eval(x)
print(tup, type(tup))
except (SyntaxError, ValueError):
print("%s -> Invalid tuple format given" % x)
可以在这里看到
$ python ./pyProg.py "(1, 2"
(1, 2 -> Invalid tuple format given
$ python ./pyProg.py "(1, 2) (1, 2)"
(1, 2) (1, 2) -> Invalid tuple format given
答案 1 :(得分:1)
如果您希望参数采用特定格式,那么如果您使用解析各个值的常规参数处理解析器,则可用性可能会更好。
arg_tuples = [tuple(t.split(',') for t in sys.argv[1:]]
省略括号可让您省略shell命令行上的引号(尽管如果元组成员不总是数字,则出于其他原因当然也可能需要引号。)
sys.argv[]
根据定义是一个字符串列表,shell不(方便地)没有任何其他数据类型。