我的要求是将元组作为命令行参数传递,就像这样:
--data (1,2,3,4)
我尝试使用argparse
模块,但如果我像这样传递参数,它会将其接收为字符串'(1,2,3,4)'
。我尝试在argparse.add_argument
中给出type=tuple
,但这里没有用。
我需要添加一个新的类型类并将其传递给add_argument
的类型参数吗?
更新
根据答案,我尝试了ast.literal_eval
。谢谢。但结果中会有空格,如下所示。
(1,2,3,4)
<type 'str'>
(1, 2, 3, 4)
<type 'tuple'>
argparse
文档,type
必须是一个函数(callable
),它接受一个简单的字符串并将其转换为所需的对象。tuple('(1,2)')
接受一个字符串,但会将其拆分为字符,例如('(', '1', ',', '2', ')')
。此外要注意用户可能会输入--data (1, 2, 3,4)
。Shell 会按空格进行拆分。 - hpauljjson.loads
来解析看起来像字典和列表(但不是元组)的字符串。 - hpauljeval()
以将其转换为元组。 - muman