我正在使用ast.literal_eval(str)
来评估包含('a', 'b', 'c')
等元组的字符串。但是,如果由于某种原因,此元组仅包含单个元素,则表达式将忽略括号并仅返回元素:
>>> string = "('a')"
>>> x = ast.literal_eval(string)
>>> x
'a'
有解决这个问题的非黑客方法吗?有时,我可能有一个元组元组,如(('a','b'))
,因此不能只检查类型,这个问题更加严重。谢谢!
答案 0 :(得分:2)
这是因为('a')
不是一个元组,而是一个被视为a
的字符串。仅包含一个对象的元组定义为('a',)
(请注意,
)
>>> type('a')
<type 'str'> <-- String
>>> type(('a'))
<type 'str'> <-- String
>>> type(('a',))
<type 'tuple'> <-- Tuple