【发布时间】:2020-10-31 02:56:13
【问题描述】:
我的问题是为什么以有效方式创建的字典“a”与字典“b”不同。
在下面的代码中,您会看到一个简单的字典“a”,我想用它来检查
a = ast.literal_eval(a)
奇怪的是,“a”似乎不是字典或任何 Python 语法认为有效的东西,因为 ast.literal_eval(a) 会引发异常:
失败:错误的节点或字符串:{':': 5}
字典操作 a.keys() 按预期返回 ':'。
更奇怪的是,当用“转换”原始字典时
b = str(a)
字典 b 实际上在第二个 try 语句中被评估为字典。
import ast
a = {}
a[":"] = 5
b = str(a)
print(a)
print(b)
try:
a = ast.literal_eval(a)
print(type(a))
except Exception as e:
print(f'a failed: {e}')
try:
b = ast.literal_eval(b)
print(type(b))
except Exception as e:
print(f'b failed: {e}')
输出:
{':': 5}
{':': 5}
a failed: malformed node or string: {':': 5}
<class 'dict'>
【问题讨论】:
-
是什么让您认为您可以将
dict传递给literal_eval?它的重点是将字符串转换为 Python 对象,有点像str(x)的反面。 -
将字典传递给
literal_eval有什么意义?您希望输出是什么? -
我希望 literal_eval() 检查传递的字符串或节点是否对 python 语法有效。
-
@ZackDev 但是你的字典既不是节点也不是字符串...
标签: python-3.x dictionary abstract-syntax-tree