gpt4 book ai didi

intersystems-cache - 如何将 "throw"%Status 转换为 %ETN?

转载 作者:行者123 更新时间:2023-12-04 06:11:58 24 4
gpt4 key购买 nike

许多 Caché API 方法返回一个 %Status 对象,指示这是否是一个错误。问题是,当它是一个未知错误时,我不知道如何处理(如网络故障),我真正想做的是“抛出”错误,这样我的代码就会停止它正在做的事情,并且错误会被一些更高的人捕获级别错误处理程序(和/或内置的 %ETN 错误日志)。

我可以用 ztrap喜欢:

s status = someObject.someMethod()
ztrap:$$$ISERR(status)

但这并没有报告太多细节(与 .NET 不同,我可以将异常一直抛出到堆栈的顶部),我想知道是否有更好的方法来做到这一点。

最佳答案

查看 %Exception.StatusException 的类引用。您可以从您的状态创建一个异常并将其抛出到当时处于事件状态的任何错误陷阱(因此控制流将与您的 ZTRAP 示例相同),如下所示

set sc = someobj.MethodReturningStatus()
if $$$ISERR(sc) {
set exception = ##class(%Exception.StatusException).CreateFromStatus(sc)
throw exception
}

但是,为了恢复捕获此异常的错误陷阱代码中的异常信息,必须使用 try/catch 建立错误陷阱。较旧的错误处理程序 $ztrap 和 $etrap 不为您提供异常对象,您只会看到您有一个 错误作为 $ZERROR 值。即使在这种情况下,控制流也会按照您的意愿工作,但是如果没有 try/catch,您的情况不会比使用 ZTRAP 好

关于intersystems-cache - 如何将 "throw"%Status 转换为 %ETN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com