ast.literal_eval()接受
+评估的数据,因为
5+2j(复数*)是有效的文字。同样适用于
-。为了使代码简单,没有尝试排除
+或将其
-作为二进制运算符。
不允许其他运算符;该函数 应该 只接受文字,不接受表达式。
换句话说,这
5 +7是一个错误,但如果不中断对构造复数的支持,就很难修复该错误。该实现将使用范围限制为数字,一元
+和
-或其他二进制运算符(因此,您不能使用它们来连接列表或产生集合差)。
另请参阅几个相关的Python Bugtracker 条目:#25335
ast.literal_eval无法解析 以前
导 “
+”表示的数字 ,#22525
ast.literal_eval()未按文档所述执行操作,
并且#4907 ast.literal_eval无法正确处理复数
*从技术上讲
2j是有效的文字;Python解析
5+2j为
int(5) binop(+) complex(0, 2),并且仅在以后
complex(5, 2)实际执行加法运算时才从结果中生成一个对象。



