PyYAML получает номер строки узла

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

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


person edA-qa mort-ora-y    schedule 02.03.2012    source источник
comment
Я искал то же самое и нашел этот другой ответ здесь, на SO.   -  person RocketR    schedule 13.12.2012


Ответы (1)


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

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 прикрепляет информацию о строке и столбце из начального маркера к своему типу коллекции (как это происходит с комментариями и информацией о блоке/стиле потока.

person Anthon    schedule 18.04.2015