如何在Python中避免使用eval进行字符串转换?
我遇到了一个关于“eval”的问题,想请教一下你们的建议。我知道使用eval是不好的,我希望能避免它,但我不知道该怎么做……
我在数据库里存了一些Python对象,它们是以字符串的形式存储的,我用eval把它们转成实际的对象。举个例子,我的对象可能是一些简单的字符串,比如"[2,1,3,4]"或者"[[None,None],None]"——它们对应不同类型的对象,没有遵循一个共同的模式。我必须把它们以人类可读的形式存储,像现在这样。
我的问题是,如何在这种情况下避免使用eval呢?我不想为每个对象写一个解析器。
如果我真的必须使用eval,我该如何清理这些字符串,以确保它们不会做一些危险的事情呢?
1 个回答
4
使用 ast.literal_eval:
In [9]: import ast
In [10]: ast.literal_eval("[2,1,3,4]")
Out[10]: [2, 1, 3, 4]