PyYAML получение номера строки узла - PullRequest
4 голосов
/ 02 марта 2012

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

Я не вижу ничего очевидного в документах, но есть одна вещь Mark, которая, похоже, относится к номерам строк.

1 Ответ

0 голосов
/ 18 апреля 2015

Расширения, которые я сделал в ruamel.yaml , включают опцию для доступа к строке и столбцу для коллекций (YAML: отображение, последовательность, набор, диктант odict / Python, список, набор, orderdict):

import ruamel.yaml

data = ruamel.yaml.load("""
# example
- a
- e
- {x: 3}
- c
""", Loader=ruamel.yaml.RoundTripLoader)
assert data[2].lc.line == 3
assert data[2].lc.col == 2

и строка, и столбец начинают отсчитываться с 0.

Вы правы насчет "вещи" Mark, но стандартные загрузчики PyYAML отбрасывают ее при создании объекта Python.ruamel.yaml.RoundTripLoader присоединяет информацию строки и столбца от начальной метки к типу коллекции (как это происходит с комментариями и информацией о блоке / стиле потока).

...