Prova a non eseguire il catch block quando l'analisi JSON fallisce
Vedo che quando Parse JSON fallisce in un Try, il blocco catch non sembra essere eseguito. Vedo anche che l'analisi di JSON malformato è stata più problematica di così in passato (vedi questo filo ), quindi ho preso la logica di analisi suggerita da quel thread, che mi consente di fare in modo che Try si comporti come previsto, ma sembra problematico che Try abbia questo scenario molto specifico in cui non esegue la cattura.
Codice:
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>Produzione:</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
Automazione e scriptingRi: Prova a non eseguire il catch block quando l'analisi JSON fallisce(ho fatto questo commento per errore, non vedo un modo per eliminarlo)
Ri: Prova a non eseguire il catch block quando l'analisi JSON fallisceTry() non rileva l'errore perché Parse JSON() non genera un errore. Stampa un messaggio nel registro e restituisce un valore mancante quando si verifica un errore.
Alcune funzioni in JMP generano errori; questo di solito è dovuto al fatto che l'errore è grave e deve essere gestito esplicitamente. Alcuni scrivono un messaggio di registro (come questo) e il JSL continua. A volte il codice restituito non riuscito è semplicemente un valore mancante; puoi usare la funzione ismissing() per testarlo.
Sono d'accordo sul fatto che questo avrebbe dovuto essere un lancio piuttosto che un messaggio/valore mancante, ma non mi aspetto che cambi dopo così tante versioni.
Ri: Prova a non eseguire il catch block quando l'analisi JSON fallisceSuppongo abbia senso. Solo notando per i futuri lettori che probabilmente è meglio usare Is Associative Array qui piuttosto che Is Missing, poiché Is Missing verrà lanciato nel caso in cui Parse JSON abbia esito positivo.
Sarebbe utile se questo fosse annotato nell'indice di scripting, poiché l'analisi in altri linguaggi tende a generare JSON non valido e poiché questo tipo di eccezione di solo log sembra abbastanza simile a un'eccezione completa.
Ri: Prova a non eseguire il catch block quando l'analisi JSON fallisce@giuliano - documentare come gestisce JSON errati e le migliori pratiche per gestirlo. Penso @mat-ski è corretto manca ha una fastidiosa modalità di errore per i non numeri.