首页 > 解决方案 > 当字符串列表包含“inf”时,将其转换为列表时出错

问题描述

我正在尝试将此字符串转换为列表:

x ='[(6167.473999999997, inf), (9442.406000000004, 9527.590999999999), (12130.588999999996, 12548.22100000001), (10461.183000000006, 10669.501999999999), (53711.67000000004, 53805.396000000015), (9295.464999999997, 8816.614999999998), (12636.802000000005, 12378.355999999996)]'

我尝试使用ast.literal_eval(x)eval(x)但都给我一个错误。使用ast我得到的方法时:ValueError: malformed node or string: <_ast.Name object at 0x7f3a27bacb10>和使用eval()我得到的方法时:NameError: name 'inf' is not defined。我了解错误的原因,但我不知道如何解决它们。

我该如何解决这些错误?

标签: pythonstringlist

解决方案


inf无效...

我想你可以更换它

ast.literal_eval(x.replace('inf','float("inf")'))

但这会中断,因为您不能 literal_eval 函数调用

你可以使用 eval ...但那更危险

eval(x.replace('inf','float("inf")'))

或者您可以使用将被翻译为 inf 的数字

ast.literal_eval(x.replace('inf','2e308'))  # will result in a python `inf`


>>> print(ast.literal_eval('2e308'))
inf

[警告] 最后一个选项可能与实现有关,可能不适用于所有版本的 python,它可能会在未来的 python 版本中中断


推荐阅读