Intente no ejecutar el bloque catch cuando falle el análisis JSON
Veo que cuando Parse JSON falla en un intento, el bloque catch no parece ejecutarse. También veo que analizar JSON con formato incorrecto ha sido más problemático que esto en el pasado (ver este hilo ), así que tomé la lógica de análisis sugerida de ese hilo, lo que me permite hacer que Try se comporte como se esperaba, pero parece problemático que Try tenga este escenario tan específico en el que no ejecuta su captura.
Código:
someVar = Try(
Parse JSON("{{1}}"),
Print("in catch 1");
2;
);
someVar2 = Try(
Throw( "broke!" ),
Print("in catch 2");
2;
);
someVar3 = Try(
txt = Log Capture( result = Parse JSON( "{{1}}") );
If( Length( txt ),
Throw( txt ) // error message
);
result; // parsed JSON
,
Print("in catch 3");
2;
);
Print("someVar is:");
Print(someVar);
Print("someVar2 is:");
Print(someVar2);
Print("someVar3 is:");
Print(someVar3);</CODE></P><P>Producción:</P><P> </P><P> </P><PRE><CODE class=" language-jsl">Unexpected "{". Perhaps there is a missing }.
Line 1 Column 2: {►{1}}
"someVar is:"
.
"someVar2 is:"
2
"someVar3 is:"
2
Automatización y secuencias de comandosRe: Intente no ejecutar el bloque catch cuando falla el análisis JSONTry() no detecta el error porque Parse JSON() no arroja un error. Imprime un mensaje en el registro y devuelve un valor faltante cuando hay un error.
Algunas funciones en JMP arrojan errores; Esto suele deberse a que el error es grave y debe solucionarse explícitamente. Algunos escriben un mensaje de registro (como este) y el JSL continúa. A veces, el código de retorno fallido es simplemente un valor faltante; puedes usar la función ismissing() para probarlo.
Estoy de acuerdo en que esto debería haber sido un lanzamiento en lugar de un mensaje/valor faltante, pero no esperaría que cambiara después de tantos lanzamientos.
Re: Intente no ejecutar el bloque catch cuando falla el análisis JSONSupongo que tiene sentido. Solo señalar para futuros lectores que probablemente sea mejor usar Is Associative Array aquí en lugar de Is Missing, ya que Is Missing se lanzará en caso de que Parse JSON tenga éxito.
Sería útil si esto se anotara en el índice de secuencias de comandos, ya que el análisis en otros lenguajes tiende a generar JSON con formato incorrecto y dado que este tipo de excepción de solo registro se parece bastante a una excepción completa.
Re: Intente no ejecutar el bloque catch cuando falla el análisis JSON@Julian - documentar cómo maneja JSON incorrecto y las mejores prácticas para solucionarlo. Creo @mat-ski es correcto que Está perdido tiene un modo de falla molesto para los que no son números.