一个
finally
块在管理资源(如文件句柄)时非常有用。它可以使用或不使用
catch
封锁。通常会看到的示例是关闭文件句柄:
var f = fileopen(filename, "r")
try {
// Some dubious code
} finally {
// f is freed, regardless of any exception thrown within the try block
fileclose(f);
}
这个
最后
无论是否在
try
不管是不是堵住。
rethrow
如果您最终想要在调用堆栈中冒泡异常,但首先要对其执行一些操作,那么这很方便。我经常发现自己在重新引发异常以生成一般错误页之前记录了异常:
try {
// Something sketchy
} catch (any e) {
writelog(type="Error", file="uhoh.log", text=e.message);
rethrow;
}
再流
在处理只能通过内省识别的怪异ColdFusion异常时也很有用,而不是按类型捕获它们。也许您想忽略一个特定的异常,当您没有编写粗略的身份验证代码(是的,这是根据经验)遇到无效会话时,会抛出该异常,但会弹出其他任何异常:
try {
// Hey, external code, is this user authenticated?
} catch (any e) {
if (e.id != MAGIC_NUMBER_TO_IGNORE)
rethrow;
}
像往常一样,一个好的资源是本·纳德尔的
ColdFusion blog
.