Что же такое ast.literal_eval ? Если просто и коротко, то это функция для превращения строки str в другой питоновский тип данных.
Смотрите пример, чтобы всё понять:
import ast
# Возвращает None
result = ast.literal_eval('None')
print(result) # None
print(type(result)) # <class 'NoneType'>
# Возвращает список
result = ast.literal_eval('[1, 2, 3]')
print(result) # [1, 2, 3]
print(type(result)) # <class 'list'>
# Возвращает словарь
result = ast.literal_eval('{"key": "value"}')
print(result) # {'key': 'value'}
print(type(result)) # <class 'dict'>
Как видно из примера, функция literal_evel сама подбирает нужный тип для конвертации содержимого строки. Круто!
⚠Внимание!
literal_eval удобно использовать, даже если вы не уверены в данных. Выполнить
rm -rf / функция не сможет. Но будьте готовы отлавливать ошибки, если данные не поддаются преобразованию:result = ast.literal_eval('a = 42') # SyntaxError: invalid syntax
result = ast.literal_eval('Hi') # ValueError: malformed node or string on line 1: <ast.Name object at 0x7969dde980>Для самых любопытных, напомню. 🤓
В Python есть модуль pickle. Он умеет мариновать питоновские типы в виде байт-файла. О нём писал тут и тут.
А ещё в Python есть модуль json. Он тоже умеет превращать строк в данные и наоборот. Про него я тут не писал. 🙃
#познавательно #lifehack