包含try / catch没有捕获Coldfusion异常

时间:2017-05-17 18:49:00

标签: coldfusion

您可以在第一个或第二个指定的代码块取消注释的情况下运行this cftry gist以查看问题。

<cffunction name="alpha" returntype="boolean">
    <cfargument name="boo" type="boolean" />
    <cfreturn arguments.boo />
</cffunction>

<cffunction name="beta">
    <cfset var temp = {} />
    <cftry>
        <cfset temp.userID = 1 />

        <!--- This way throws an *unhandled* exception --->
        <!--- --->
        <cfif alpha(structAppend({userID = temp.userID}, foo))>
            <cfdump var="It worked" />
        </cfif>


        <!--- This way works as expected --->
        <!--- 
        <cfset temp.args = {userID = temp.userID} />
        <cfif alpha(structAppend(temp.args, foo))>
            <cfdump var="It worked" />
        </cfif>
        --->

        <cfcatch>
            <cfdump var="#cfcatch.message#" />
        </cfcatch>
    </cftry>
</cffunction>

我知道struct literal notation {}有时会在我的调试器中显示通常命名的结构,但是为什么要分配这种语法创建的结构会使结构创建发生在与#&#不同的时间。 39;未分配?

如果我调试,我可以在我设置temp.userID = 1的行上设置一个断点,它会跳过它。此外,异常是在try / catch中包含的行上抛出,但它没有捕获它。

我在JavaScript中知道&#39;吊装&#39;的概念。我只能假设在某些(但不是全部!)情况下CF正在做类似于struct literals的事情。

这是一个错误,还是已知的CF行为?

0 个答案:

没有答案