cftry/cfcatch的最佳实践

Phi*_*enn 2 error-handling coldfusion

在ColdFusion 8或更低版本中,标记的行是否在正确的位置?

<cftry>
  <cfquery name="local.qry" datasource="myDatasource">
    SELECT ID FROM TableName
    WHERE ...
  </cfquery>
  <cfset local.result = local.qry.ID><!--- this line! --->
  <cfcatch>
    <cfset local.result = Variables.objDatabase.CatchError(cfcatch)>
  </cfcatch>
</cftry>

<cfreturn local.result>
Run Code Online (Sandbox Code Playgroud)

Sha*_*son 5

是.你可以把它设置在块之外,但为什么呢?至少这样,您将捕获在分配期间可能发生的任何奇怪错误.它不太可能,但查询可能会成功,并且分配可能会失败,那么为什么不捕获这个潜在的问题呢?

你已经获得了try/catch的开销,也可以将赋值添加到try块中.

  • @Shawn:如果作业可能失败,那么你所做的每一项作业都不会被一个试试拦截块所保护吗?当像这样的任务失败时,你会遇到如此严重的问题,以至于try-catch块对你没有帮助. (3认同)
  • 这是极不可能的,这是肯定的.不,让我们不要疯狂为每项任务做一次尝试/捕获.我只是说在这个特殊情况下你也可以在那里应用作业.在<cfcatch>中设置local.result也是正确的想法,否则<cfreturn>将失败.事实上,你可以在两个地方做<cfreturn>,而不是<cfset>,而不是最后的<cfreturn>.那你就不需要分配任何东西了. (2认同)