当 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 以及处理它的最佳实践。 我认为@垫滑雪是正确的不见了对于非数字有一个恼人的故障模式。