我正在寻找与流行的尝试-最终异常清理模式等价的语义,例如为什么要使用try…终于没有了catch条款了?
这样做的想法是,不管代码是成功还是失败,您都需要执行清理步骤,但是清理代码不应该干扰报告和处理错误。有些地方还是出了问题,而且例外情况应该继续蔓延。
我想写这样的东西:
O TempFile:(/NEW:/WRITE:/STREAM)
U TempFile
L +LockName
TRY {
...code that uses TempFile and may throw an error
} FINALLY {
//Be sure to delete file whether we have an error or not
O TempFile:(/DELETE)
C TempFile
//Be sure to release lock
L -LockName
}
... Rest of code that should only execute if there was no error但是,TRY...CATCH语法在ObjectScript中不支持FINALLY子句。
特别重要的是,这两件事通常都是由最终块完成的,这一点很重要:
我不能简单地使用常规的TRY...CATCH块,因为CATCH会吃掉异常并阻止正确的错误上下文被传递到链上。也许有一种方法可以在不破坏错误上下文的情况下重新抛出原始异常?
发布于 2014-08-19 20:39:46
您可以抛出捕获错误,这将是原始错误,与原来的错误地点和任何其他,所以尝试-最后可能如下所示。
try {
// some code that could be with errors
} catch ex {
}
// finally
throw:$g(ex) ex
// rest code that can't execute if was error发布于 2016-05-25 05:07:00
在TRY和CATCH块中编写GoTo命令不是更容易的选择吗?如果CATCH块包含GOTO命令,则控件直接进入指定的位置。这个位置可以像“最终”块一样工作,并执行清理步骤。
一个样本看起来如下所示:
try {
// some code that could be with errors
GOTO xxx , 'This is the last statement of TRY block
} catch ex {
//Handle the error
GOTO XXX
}
XXX
'your clean up stepshttps://stackoverflow.com/questions/25390794
复制相似问题