2016-04-11 4 views
0

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

Я использую 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: примечания: |

Я прошел через нить In YAML, how do I break a string over multiple lines? и несколько других, но ничего не получилось.

ответ

1

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

{  notes: | 

       Its not working here 
} 

Если вы посмотрите на YAML specification и поиск строки «буквального стиле» ваш первый хит в Таблице Cotents, раздел 8.1 0,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 

       ' 

BTW, потому что по умолчанию чавканье на буквальных скаляров clipping, это ничего не меняет если вы добавите лишние пустые строки в конце таких скаляров.

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