JMP 11 中的异常处理<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
是否可以使用 try()/throw() 来查找特定的 JMP 异常?
我有一个调度程序,可以更新来自多个动态源的多个表。
我想捕获丢失的文件、列或不正确的数据类型等内容,并将它们写入 log.txt,以便在调度程序崩溃时我可以轻松查找和修复任何内容。 类似于java中的try和catch。
我知道函数 log capture() 存在,但是因为我使用 try() ,错误没有机会写入日志。 它只是跳转到我的 catch 表达式。
如果需要,我可以发布示例代码。
谢谢!
回复:JMP 11 中的异常处理进一步调查。JSL try( ) 函数(和 LogCapture)确实可以做得更好;它忽略了可以通过 exception_msg 报告的几种消息。最终结果是 try() 捕获错误,但确切的错误消息被抑制(并且也不发送到日志)。
我很确定不会出现异常消息可能性的列表。有时,exception_msg 是一个字符串,有时是一个列表(如前面的两个示例所示)。
谢谢,我会将其添加到我的列表中 - Craige
回复:JMP 11 中的异常处理谢谢克雷格,这几乎就是我们作为备用方法实施的方法。 我们强制我们的接口使用我们自己的异常消息变量,通过包装器来解决问题。 您能够阐明为什么 JMP 的异常_msg 变量的某些输出缺少任何信息。
是否有有关 exception_msg 变量的所有可能输出以及触发它们的异常的文档?
我可以看到这在规划中非常有用。
回复:JMP 11 中的异常处理在 JSL try() 函数的 catch 表达式中获取反馈的唯一方法是通过 Exception_msg 变量,但该变量并不总是设置为有用的值。有时是这样。您可以使用 JSL throw() 函数来设置它,如下所示:
尝试(打印(“你好”);抛出(“爆炸!”),显示(exception_msg))
“你好”
exception_msg =“砰!”;
因此,您可以使用如下内容包装其他可能会产生异常的 JSL:
myOpen = 函数({文件},
尝试(打开(文件),
throw(“无法打开”||文件||“详细信息=”||char(exception_msg)))
);
尝试( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
exception_msg = "无法打开 NOSUCHFILE.JMP 详细信息=。";
Open 没有设置异常消息(上面没有详细信息),但是 sqrt(string value) 确实设置了(额外的详细信息,下面):
mysqrt = 函数({v},
尝试(平方(v),
throw("无法开方"||v|| "\!ndetails="||char(exception_msg)))
);
尝试( mysqrt("减一"), write(exception_msg) );
无法开方减一
详细信息={“无法将参数转换为数字[或矩阵]”(1, "Sqrt", Sqrt /*###*/(v))}
所以你真的不需要 sqrt 的包装器。通过将可能的 exception_msg 连接到您自己的更具启发性的消息,如果 open 被增强以在将来返回异常消息,您将获得更多详细信息。exception_msg 周围的 char() 函数将不存在的消息转换为有效的字符串以进行串联。
回复:JMP 11 中的异常处理有人知道异常消息中各个条目的含义吗?
如今又多了一条记录:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
