【发布时间】:2023-04-01 14:18:01
【问题描述】:
是否有任何方法可以用没有 try-finally 或 try-except 的语言模拟它们?
如果有一些随机的、不可预测的异常发生,我需要确保运行一些清理。
我可以尝试确保没有抛出异常,这样我就可以确定我的清理代码总是运行 - 但是我不需要try-finally/except。
此刻我正试图在 Lua 中创建一个try-finally;但我认为任何解决方案也适用于其他语言。
尽管在我的一生中,如果没有语言基础设施提供的管道,我无法弄清楚如何处理异常。
但问也无妨。
【问题讨论】:
-
“断言”功能不是一个选项吗? lua.org/pil/8.3.html
-
@Will 抛出异常没有问题,无论是由我还是由我不是。我只需要阻止他们。
assert能做到吗? -
是的,我相信 assert 会阻止异常被抛出,并允许您引发自己的异常。哦,Gerald 发布的还有另一个很好的功能,pcall。我对 Lua 中的错误处理不太熟悉,但我相信有一些函数可以满足您的需求。
-
@Will我把它读成相反的:“
assert(io.open(name, "r"));这是一个典型的Lua习惯用法:如果io.open失败,assert会引发错误。”跨度> -
啊,我想我错了,但我在答案部分的朋友似乎有一些好主意:-)
标签: exception-handling lua try-catch try-finally