當 JSON 解析失敗時嘗試不執行 catch 區塊
我看到當 Parse JSON 在 Try 中失敗時,catch 區塊似乎沒有被執行。 我還發現,過去解析格式錯誤的 JSON 比這更成問題(請參閱這個線程),所以我從該線程中獲取了建議的解析邏輯,這使我能夠使 Try 按預期運行,但 Try 具有這種非常特定的場景,它不執行其捕獲,這似乎是有問題的。
代碼:
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>輸出:</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
自動化和腳本編寫回覆:當 JSON 解析失敗時嘗試不執行 catch 區塊(這個評論是錯誤的,我沒有找到刪除它的方法)
回覆:當 JSON 解析失敗時嘗試不執行 catch 區塊Try() 不會捕獲錯誤,因為 Parse JSON() 不會引發錯誤。 當出現錯誤時,它會向日誌列印一條訊息並傳回缺失值。
JMP 中的某些函數會引發錯誤;這通常是因為錯誤很嚴重並且需要明確處理。 有些會寫一條日誌訊息(就像這個),然後 JSL 會繼續。 有時失敗的回傳碼只是一個缺失值;您可以使用 ismissing() 函數來測試它。
我同意這應該是一個拋出而不是消息/缺失值,但我不希望它在這麼多次發布後發生變化。
回覆:當 JSON 解析失敗時嘗試不執行 catch 區塊我想這是有道理的。 請注意,未來的讀者可能最好在這裡使用 Is Associative Array 而不是 Is Missing,因為如果 Parse JSON 成功,Is Missing 會拋出異常。
如果在腳本索引中註明這一點,將會很有幫助,因為用其他語言進行解析往往會拋出格式錯誤的 JSON,而且這種僅記錄異常看起來與完整異常非常相似。
回覆:當 JSON 解析失敗時嘗試不執行 catch 區塊@朱利安- 記錄它如何處理不良 JSON 以及處理它的最佳實踐。 我認為@墊滑雪是正確的不見了對於非數字有一個惱人的故障模式。