Saltar al contenido

Cómo corregir el error de sintaxis de YAML: ¿no se encontró el indicador ‘-‘ esperado al analizar un bloque?

este problema se puede tratar de variadas maneras, sin embargo te mostramos la que para nosotros es la resolución más completa.

Solución:

No tiene 32 líneas en su archivo (probablemente porque eliminó datos no esenciales del ejemplo), pero el nivel de sangría apunta a la línea con fi.

En realidad, el problema comienza antes y lo que desea hacer es especificar la acción a tomar como una línea múltiple string. Puede especificarlos en YAML de varias maneras, pero la más limpia es usar el indicador escalar literal “|“, que conserva las líneas nuevas:

install:

  - |
    if [[ "$TEST_PY3" == "false" ]]; then
      pip install Cython;
      python setup.py build; # To build networkx-metis
      mkdir core; # For the installation of networkx core
      cd core;
      git clone https://github.com/orkohunter/networkx.git;
      cd networkx/;
      git checkout addons;
      python setup.py install;
      cd ..;
    fi

No existe una herramienta automática de reindentación de YAML para este tipo de errores.

Los reindentadores para Python toman el código de trabajo y hacen que la sangría sea consistente (reemplazando las TAB, siempre la misma sangría por nivel). La reindentación del código de Python en el código con errores de sintaxis no funciona o puede producir resultados no correctos.

Los reindentadores para YAML enfrentan el mismo problema: qué hacer si la entrada no tiene sentido (y lo que está claro para ti y para mí, no siempre está claro para un programa). Simplemente convertir todo lo que no se analiza bien en un escalar de varias líneas no es una solución genérica.

Aparte de eso, la mayoría de los analizadores YAML descartan cierta información sobre la lectura en los archivos, que no querrá perderse al volver a sangrar, incluidos los comentarios de EOL, los nombres de anclaje hechos a mano, el mapeo key pedidos, etc. Todo sin violar los requisitos de la especificación.

Si desea sangrar uniformemente su YAML (correcto), puede usar el yaml utilidad que forma parte de la [ruamel.yaml][2] paquete (descargo de responsabilidad: soy el autor de ese paquete). Su entrada original utilizada con yaml round-trip .travis.yml daría:

  ... en "", línea 3, columna 3: - si [[ "$TEST_PY3" == "false" ... 
      ^
expected , but found ''
  in "", line 6, column 7:
          mkdir core; # For the installati ...

Unfortunately not much more helpful in finding the error, the correct .travis.yml version run through yaml round-trip .travis.yml will tell you that it stabilizes on the second round-trip (ie. on the first the extra whitespace is lost). And yaml round-trip .travis.yml --save gives you:

install:
- |
  if [[ "$TEST_PY3" == "false" ]];  luego pip instala Cython;  python setup.py compilación;  # Para construir el núcleo networkx-metis mkdir;  # Para la instalación de networkx core cd core;  clon de git https://github.com/orkohunter/networkx.git;  cd redx/;  complementos de pago de git;  python setup.py instalar;  discos compactos ..;  fi

Tenga en cuenta que en este # TO build networkx-metis no es un comentario YAML. Es solo parte de la línea múltiple. string. Sin embargo, se conservaría un comentario en una línea antes de la primera o después de la última.

El error significa que tiene un error de sintaxis y este en particular es difícil de rastrear, ya que podría significar varias cosas, sangría incorrecta, incluida la falta de comillas dobles o debe asegurarse de usar comillas dobles en algunos caracteres especiales.

En caso de que lleve un registro de su .travis.yml en el repositorio git, usando travis comando puede comprobar fácilmente las versiones anteriores y comparar.

Por ejemplo:

$ travis lint <(git show HEAD^:.travis.yml )
Warnings for /dev/fd/63:
[x] syntax error: (): did not find expected '-' indicator while parsing a block collection at line 61 column 3
$ travis lint <(git show HEAD~2:.travis.yml)
Hooray, /dev/fd/63 looks valid :)

Donde HEAD~2 está verificando 2 confirmaciones detrás, así que siga aumentando el número hasta que funcione, una vez que lo encuentre, luego compare como:

git diff HEAD~2 .travis.yml

De lo contrario, sepárelo en pedazos más pequeños o siga quitando algunas secciones hasta que funcione.


Utilizando ruby es una forma alternativa de verificar su sintaxis YAML:

ruby -e "require 'yaml';puts YAML.load_file('.travis.yml')"

por lo que no necesita PUBLICAR su código cada vez a través de travis que funciona de manera similar a Travis WebLint.


Ejemplo

La siguiente sintaxis es incorrecta:

language: python
before_script:
  - |
    true
# Some comment.
    true

porque el comentario tiene una sangría incorrecta según:

[x] error de sintaxis: (): no se encontró el indicador '-' esperado al analizar una colección de bloques en la línea 3, columna 3

Aquí hay una sintaxis válida:

language: python
before_script:
  - |
    true
    # Some comment.
    true

El problema anterior ocurre especialmente cuando se editan archivos en Vim, que sangra los comentarios para que comiencen desde el principio.

valoraciones y comentarios

Si crees que ha resultado de ayuda nuestro artículo, nos gustaría que lo compartas con el resto programadores de este modo contrubuyes a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *