PyYAML автоматически преобразует определенные ключи в логические значения ⇐ Python

Программы на Python
Anonymous
PyYAML автоматически преобразует определенные ключи в логические значения

Сообщение Anonymous »

Я уже несколько месяцев работаю с парсером PyYAML, чтобы преобразовывать типы файлов как часть конвейера данных. Я обнаружил, что синтаксический анализатор временами ведет себя весьма своеобразно, и, похоже, сегодня я наткнулся на еще одно странное поведение. Файл, который я сейчас конвертирую, содержит следующий раздел:

Код: Выделить всё

off:
yes: "Flavor text for yes"
no: "Flavor text for no"
Я сохраняю список текущих вложений в словаре, чтобы можно было создать простой документ, но сохраняю вложения для последующего преобразования обратно в YAML. Я получил ошибку TypeError, сообщающую, что я пытался объединить типы str и bool. Я исследовал и обнаружил, что PyYaml на самом деле берет мой фрагмент текста выше и преобразует его в следующее:

Код: Выделить всё

with open(filename, "r") as f:
data = yaml.load(f.read())
print data

>> {False: {True: "Flavor text for yes", False: "Flavor text for no}}
Я быстро проверил и обнаружил, что PyYAML делает это для да, нет, true, ложь, вкл., выкл.. Это преобразование выполняется только в том случае, если ключи не заключены в кавычки. Цитированные значения и ключи будут переданы нормально. В поисках решения я нашел такое поведение, описанное здесь.

Хотя другим может быть полезно узнать, что цитирование ключей не позволит PyYAML сделать это, у меня нет этой опции, поскольку я не автор этих файлов и написал свой код, чтобы как можно меньше затрагивать данные.

Есть ли способ обойти эту проблему или способ переопределить поведение преобразования по умолчанию в PyYAML?

Подробнее здесь: https://stackoverflow.com/questions/364 ... ean-values

Вернуться в «Python»