我知道这看起来一定是一个非常人为的例子,但我有一个情况,在一个 catch 中我将尝试/捕获另一个异常。但是,我想在第二个捕获中包含有关第一个异常的信息。理想情况下它看起来像这样:
try {
a = b;
}
catch ( any e ) {
local.originalException = Duplicate(e);
try {
throw "New exception!!!";
}
catch( any e ) {
e.originalException = local.originalException;
doNotification( e );
}
}
当我运行这个小测试时,设置 e.originalException 时不会发生意外异常,但是,当我在设置后立即转储异常时,它不是异常结构的一部分。也许还有另一种方法可以实现这一目标吗?我正在使用 ACF 9。
不幸的是,您实际上无法将太多附加信息“附加”到 CF 异常。但是你可以做这样的事情来将一个异常包装在另一个异常中......
<cftry>
<cfset a = b>
<cfcatch>
<cftry>
<cfthrow message="new exception" extendedinfo="#serializeJson(cfcatch)#">
<cfcatch>
<cfset stOriginalExceptionData = deserializeJson(cfcatch.extendedInfo)>
<cfdump var="#stOriginalExceptionData#">
</cfcatch>
</cftry>
</cfcatch>
这种技巧对你有帮助吗?
您是否尝试过复制该对象?因为根据 documentation 你不能修改 cfcatch 异常:
Changed对象修改:不能修改返回的对象 cfcatch
我知道我回答“有点”晚了,但我遇到了同样的问题,这就是我解决它的方法:
<cfscript>
try {
a = b;
}
catch ( any e ) {
local.originalException = Duplicate(e);
try {
throw "New exception!!!";
}
catch( any e ) {
local.e = deserializeJson(serializeJson(e));
local.e.originalException = local.originalException;
writeDump(local.e);
}
}
</cfscript>