错误信息——是哪一行?JMP 可以帮助用户查找代码中的错误。如果代码中使用了未解析的名称,JMP 会停止执行并显示错误消息,指出出错的代码行。
print(1);
result = x + zzz_missing;

我们来稍微修改一下代码。当 JMP 运行这段代码时
myFunc = Function( {x},
{},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );
它再次返回错误信息:

但它指向代码的第 3 行,也就是 x 的定义处。这非常令人惊讶:错误“发生”在第 4 行:用户漏掉了用于保护结果的名称 expr()函数——而 JMP 错误地计算了这个表达式!
由于我们已经在另一篇文章中讨论过这种行为( 错误跟踪:JMP 尝试“帮助” ),我们将直接进入下一个令人惊讶的情况。
事实上,更令人惊讶的是这段代码的错误信息:
myFunc = Function( {x},
{Default Local},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );

-> 这条线路没有任何信息!?!——甚至连错误信息都没有。
为什么?
自动化和脚本编写回复:错误信息——是哪一行?Try() 也存在同样的限制:无法获取代码行信息。
Try(
result = zzz_missing;
Print( 1 );
,
Print( exception_msg )
);

回复:错误信息——是哪一行?是否有命令
例如,日志捕获函数 Capture()或尝试()即使在封闭表达式中出现错误也不会停止。
返回导致错误的代码行?
回复:错误信息——是哪一行?日志捕获
根据脚本索引,它会将输出捕获到日志中并将其作为字符串返回。

但它的功能远不止这些!
它的作用类似于try() 函数——允许在求值表达式内部发生致命错误后继续执行代码。
log=Log capture(
result = zzz_missing;
print(1)
);
Print(2);
Show(log)
print(1)被跳过 - print(2)被执行。

几乎完美。可惜的是,它忘记写出出错的代码行!
回复:错误信息——是哪一行?啊: 错误类型,作者: 文斯·法勒

@Ryan_Gilmore ,请问您能否重新启用投票功能?
@Ben_BarrIngh , @russ_wolfinger ,供您参考。
回复:错误信息——是哪一行?或许可以把这个请求和这个请求合并起来:
改进了错误日志中的 JSL 堆栈跟踪
回复:错误信息——是哪一行?顺便问一下,有人知道异常消息中返回的是什么吗?

1?
2?
回复:错误信息——是哪一行?JSL 代码能否触发“子”程序的执行,而该子程序可能会因出错而终止并显示错误消息?
主代码仍然会继续运行并继续执行,无论是在子程序执行完毕之后,还是在子程序执行终止之后?
回复:错误信息——是哪一行?// demo command
MyExpr = Expr(
Print( 1 );
z = 5;
x = xyz;
Print( 2 );
);
stopnow = 0; // if there is an error, don't execute subsequent blocks of code
summary = "";
// execute blocks of code and collect replies and error messages
For Each( {part, line}, Name Expr( myExpr ),
Try(
Eval( Name Expr( part ) );
new = "";
,
new = "part " || Char( line ) || ": " || Char( Name Expr( part ) ) || "\!n" || Char( exception_msg );
stopNow = 1;
);
Wait( 0 );
summary = summary || new || (tmp = Char( Get Log( -1 )[1] ) ; If( tmp == "/*:", "", "\!N" || tmp || "\!N" ));
Clear Log();
If( stopnow, break() );
);
Show(summary);

假设代码很简单,每个代码块最多只有 1 个回复。
可以轻松扩展以处理更复杂的代码。