异常处理 – 如何在没有它们的语言中模拟try-finally或try-except

有没有办法模拟try-finally或try-except在没有它们的语言中?

如果有一些随机的,不可预测的异常发生,我需要确保一些清理运行.

我可以尝试确保抛出没有异常,这样我确信我的清理代码总是运行 – 但后来我不需要try-finally / except.

就在这一刻,我正试图在Lua中创造一个尝试 – 终极;但我认为任何解决方案也适用于其他语言.

虽然,对于我的生活,我无法弄清楚如何在没有语言基础设施提供的管道的情况下处理异常.

但从来没有伤害过要求.

最佳答案
Lua已经拥有必要的机制来完成与异常不同的事情.即pcall.

您可以使用pcall执行任何Lua函数.如果该函数(或它调用的任何函数)调用错误(如果断言条件不为真,则断言调用错误),然后流控制将返回到pcall语句的站点. pcall将返回false和错误消息(传递给错误的内容).

有了这个,你可以“抛出”错误并“捕获”它们.你的“尝试”只是pcall;你的“catch”语句检查pcall结果.

另外,请记住:Lua是一个垃圾收集环境.你不应该做任何清理工作.或者,如果你这样做,你需要改变Lua模块所需的任何东西. Lua API应该是Lua API,而不是C或C API.

转载注明原文:异常处理 – 如何在没有它们的语言中模拟try-finally或try-except - 代码日志