PyYAML не может анализировать последовательность последовательностей - PullRequest
1 голос
/ 13 июля 2020

Это правильный YAML:

jobs:
  - type: Agricultural

Это недопустимый YAML:

jobs:
  - type: Agricultural
    - title: Farmer

Почему нет? В PyYAML это дает:

yaml.parser.ParserError: while parsing a block mapping
  in "jobs.yaml", line 2, column 5
expected <block end>, but found '-'
  in "jobs.yaml", line 3, column 5

Ответы [ 2 ]

1 голос
/ 21 июля 2020

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

Отображение в случае, если есть только пара значений ключа (type, Agricultural), последовательность содержит сопоставление (с ключом title)

Есть несколько способов изменить это на допустимый YAML, вот некоторые из них:

  • вы можете не указывать ключ type и использовать agricultural в качестве ключа для вложенного списка:

    jobs:
      - Agricultural:
        - title: Farmer
    
  • вам может не понадобиться вложенная последовательность:

    jobs:
      - Agricultural:
        title: Farmer
    
  • вы можете использовать теги, которые позволяют напрямую загружать соответствующий базовый класс вместо проверки строки Agricultural себя:

    jobs:
      - @Agricultural
        title: Farmer
    

Для последнего требуется соответствующий зарегистрированный класс, но это лучшее решение IMO, если у вас несколько типов (под) заданий.

1 голос
/ 13 июля 2020

пример того, что будет действительным и понравится вам:

--- 
jobs: 
  - type: agricultural
    titles: 
      - Farmer
      - Picker
      - Combine Operator
   - type: manufacturing
     titles:
       - assembler
       - shipper
       - shop forman
...