Saltar al contenido

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

Solución:

No tiene 32 líneas en su archivo (probablemente porque eliminó los 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 realizar como una cadena de varias líneas. Puede especificarlos en YAML de varias formas, pero la más limpia es usar el indicador escalar literal “|“, que conserva las nuevas líneas:

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 re-sangría YAML para este tipo de errores.

Reindenters 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 re-sangría de código Python en código con errores de sintaxis, o no funciona o puede producir resultados incorrectos.

Los reintroductores para YAML enfrentan el mismo problema: qué hacer si la entrada no tiene sentido (y lo que está claro para usted y para mí, no siempre está claro para un programa). 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 desechan cierta información al leer en los archivos, que no querrá perderse al volver a sangrar, incluidos los comentarios EOL, los nombres de ancla hechos a mano, el orden de las claves de mapeo, etc. Todo sin violar los requisitos en la especificación.

Si desea sangrar uniformemente su YAML (correcto), puede usar el yaml utilidad que es 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 <block end>, but found '<scalar>'
  in "<byte string>", 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 install 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 networkx /;  complementos de git checkout;  instalación de python setup.py;  CD ..;  fi

Tenga en cuenta que en este # TO build networkx-metis no es un comentario YAML. Es solo una parte de la cadena de varias líneas. Sin embargo, se conservará 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 comillas dobles algunos caracteres especiales.

En caso de que lleve un registro de su .travis.yml en el repositorio de 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: (<unknown>): 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 :)

Dónde HEAD~2 está comprobando 2 confirmaciones por detrás, así que siga aumentando el número hasta que funcione, una vez encontrado, luego compare como:

git diff HEAD~2 .travis.yml

De lo contrario, sepárelos en trozos 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

Esta es una sintaxis válida:

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

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

¡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 *