首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试-在CachéObjectScript中最终等效

尝试-在CachéObjectScript中最终等效
EN

Stack Overflow用户
提问于 2014-08-19 18:46:08
回答 2查看 498关注 0票数 3

我正在寻找与流行的尝试-最终异常清理模式等价的语义,例如为什么要使用try…终于没有了catch条款了?

这样做的想法是,不管代码是成功还是失败,您都需要执行清理步骤,但是清理代码不应该干扰报告和处理错误。有些地方还是出了问题,而且例外情况应该继续蔓延。

我想写这样的东西:

代码语言:javascript
复制
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会吃掉异常并阻止正确的错误上下文被传递到链上。也许有一种方法可以在不破坏错误上下文的情况下重新抛出原始异常?

EN

回答 2

Stack Overflow用户

发布于 2014-08-19 20:39:46

您可以抛出捕获错误,这将是原始错误,与原来的错误地点和任何其他,所以尝试-最后可能如下所示。

代码语言:javascript
复制
try {
    // some code that could be with errors
} catch ex {
}
// finally

throw:$g(ex) ex
// rest code that can't execute if was error
票数 2
EN

Stack Overflow用户

发布于 2016-05-25 05:07:00

在TRY和CATCH块中编写GoTo命令不是更容易的选择吗?如果CATCH块包含GOTO命令,则控件直接进入指定的位置。这个位置可以像“最终”块一样工作,并执行清理步骤。

一个样本看起来如下所示:

代码语言:javascript
复制
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 steps
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25390794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档