У меня вопрос, почему словарь «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'>