Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表的字符串表示形式转换为实际的列表对象_Python_String_List - Fatal编程技术网

Python 将列表的字符串表示形式转换为实际的列表对象

Python 将列表的字符串表示形式转换为实际的列表对象,python,string,list,Python,String,List,我有一个看起来与列表相同的字符串,比如: fruits = "['apple', 'orange', 'banana']" 如何将其转换为列表对象?我认为这就是ast.literal\u eval的用途 () 正如评论中指出的那样,是安全的。从文档中: 安全地计算表达式节点或包含Python的字符串 表情。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语 这可以用于安全地评估包含Python的字符串 来自不受信任源的表达式,无需解析 重视自己

我有一个看起来与列表相同的字符串,比如:

fruits = "['apple', 'orange', 'banana']"

如何将其转换为列表对象?

我认为这就是ast.literal\u eval的用途

()

正如评论中指出的那样,是安全的。从文档中:

安全地计算表达式节点或包含Python的字符串 表情。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语

这可以用于安全地评估包含Python的字符串 来自不受信任源的表达式,无需解析 重视自己

对的简单调用将执行以下操作:

或者,正如本文所解释的,可以更安全地完成相同的操作(意思是:不存在意外副作用或恶意代码注入的风险),如下所示:

fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})

此解决方案的优点是不依赖于其他模块。

注意:如果调用数组内部的函数(或除字符串、数字、元组、列表、dicts、boolean和None之外的任何类型),则此方法不起作用。对于这些情况,您可以使用
eval
。注意事项:
ast.literal\u eval
仅适用于文字,其他情况均不适用。它确实可以保护您的程序不受代码注入的影响,例如,
“['apple'、'orange'、'banana'];import os;os.remove('a_file')”
会因
literal_eval而失败,我也有同样的问题,但我的字符串列表类似于此
水果=“['apple'、'orange'、'banan'a']”
你将如何处理
香蕉
a
之间的逗号。避免了我陷入字符串操作。使用
eval(frtstring,{内置:无},{})可以更安全地实现这一点。
@mgilson谢谢你的提示,我更新了我的答案-1这里没有理由使用
eval()
ast.literal\u eval()
将以一种更好、更安全的方式完成这项工作。虽然
ast.literal\u eval
更好,但
eval
起作用(它偶尔有用,因此值得了解)。我看不出有任何理由否决它,因为它确实符合问题的要求(+1)。@mgilson:使用
eval()
会带来严重的安全隐患,即使
{u内置:None}
也无法拯救您。
fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']
fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})