使用 literal_eval 将 listcomp 的字符串转换为 listcomp
Convert string of listcomp to listcomp using literal_eval
我正在尝试将列表理解(用户输入)的字符串转换为实际的列表理解。我正在使用来自 AST 的 literal_eval。
fruits = ['apple', 'orange']
l1 = '[ele for ele in fruits]'
l2 = literal_eval(l1)
print(l2, type(l2))
如果 l1 是列表的字符串,这将起作用,但如果它是 listcomp 的字符串,则不起作用。如果我只使用 eval(),我会在理解后得到列表,['apple','orange']。我希望得到 [ele for ele in fruits] 作为 class .
Python,一般来说像这样的语言,可以认为有解析和执行两种模式。如果您处于执行模式(您的源已被解析),则必须 eval
返回解析模式。这告诉它之前认为字符串是特殊的,它是代码。
eval
你是对的,但你只是想要 eval
而不是 literal_eval
>>> a = [1,2,3,42]
>>> code = "[x for x in a if x > 2]"
>>> eval(code)
我正在尝试将列表理解(用户输入)的字符串转换为实际的列表理解。我正在使用来自 AST 的 literal_eval。
fruits = ['apple', 'orange']
l1 = '[ele for ele in fruits]'
l2 = literal_eval(l1)
print(l2, type(l2))
如果 l1 是列表的字符串,这将起作用,但如果它是 listcomp 的字符串,则不起作用。如果我只使用 eval(),我会在理解后得到列表,['apple','orange']。我希望得到 [ele for ele in fruits] 作为 class .
Python,一般来说像这样的语言,可以认为有解析和执行两种模式。如果您处于执行模式(您的源已被解析),则必须 eval
返回解析模式。这告诉它之前认为字符串是特殊的,它是代码。
eval
你是对的,但你只是想要 eval
而不是 literal_eval
>>> a = [1,2,3,42]
>>> code = "[x for x in a if x > 2]"
>>> eval(code)