PyYAML выдает неразрешимую ошибку

Я работаю с файлами YAML, и я застрял в использовании "|" для буквальных кавычек.

Я использую PyYAML.

Основная проблема здесь заключается в том, что он работает для ключа «Словарь» первого уровня в приведенном ниже коде, но для ключа «заметки» второго уровня он не работает.

Я пробовал использовать ">" "|+" "|-", но ничего не получилось.

Description: |

    This is a sample text showing that it works fine here.

Signatures:
    -   {   
            returnValue:        'placeholder',
            notes: |

                Its not working here
    }
    -   {   
            returnValue:        'another placeholder',
            notes: ' 
                     This is working here 

                    '
        }

Я проверил синтаксис на http://yaml-online-parser.appspot.com/. , https://nodeca.github.io/js-yaml/ и другие. , я получил ошибку, что

ОШИБКА: при сканировании следующего токена найден символ '|' который не может начинать ни один токен в "", строка 8, столбец 24: примечания: |

Я просмотрел поток В YAML, как сделать Я разбиваю строку на несколько строк? и несколько других, но ничего не работает.


person Rishi Agrawal    schedule 11.04.2016    source источник


Ответы (1)


Во-первых, всегда делайте минимальный пример, который выдает ошибку:

{      notes: |

                Its not working here
}

Если вы посмотрите на спецификацию YAML и выполните поиск строки "буквенный стиль", ваш первое попадание находится в таблице содержания, раздел 8.1.2, который является частью описания стилей блоков.

Ваш код определяет стиль потока для сопоставления с использованием { }, в котором вы не можете иметь литеральные скаляры блочного стиля.

Вы должны просто сделать весь YAML единым блочным стилем (удалите {} и , между элементами сопоставления):

Description: |

    This is a sample text showing that it works fine here.

Signatures:
    -   returnValue: placeholder
        notes: |

            Its not working here
    -   returnValue:  another placeholder
        notes: '
                This is working here

                '

Кстати, поскольку по умолчанию перебор литеральных скаляров является отсечением, он не изменить что-либо, если вы добавите лишние пустые строки в конце таких скаляров.

(PyYAML поддерживает только YAML 1.1, но при этом спецификация не изменилась).

person Anthon    schedule 11.04.2016