关于一个巨大的 try/catch 块,我唯一要说的是它会停止 try 块中的所有处理,所以如果你还有一些可以完成的事情,仅仅因为轨道上有四分之一就停止整个火车可能是矫枉过正.
我有一个类似的处理一堆文件的过程,我们将每个进程放在一个单独的 try/catch 块中,这样它们就不会相互干扰。即一个损坏的第一个文件不会搞砸接下来的 3 个完美的文件。catch 块只是简单地将错误消息添加到一个字符串中,然后通知用户文件中的错误格式(或其他格式),这些格式是错误的,但好的文件按预期处理。
<!--- file one --->
<cftry>
some stuff
<cfcatch>
<cfset errors = errors & "file one did not work because #cfcatch.message#">
</cfcatch>
</cftry>
<!--- file 2 --->
<cftry>
some stuff
<cfcatch>
<cfset errors = errors & "file two did not work because #cfcatch.message#">
</cfcatch>
</cftry>
<cfetc...>
如果你在一个动态集合上循环,你可以将 try/catch 块放在循环内部,这样 try/catch 就不会停止循环并且其他东西可以处理。当然,如果文件 2 依赖于文件 1,这将不起作用...
<cfloop index = "i" ...>
<cftry>
some stuff
<cfcatch>
<cfset errors = errors & "file #i# did not work because #cfcatch.message#">
</cfcatch>
</cftry>
</cfloop>