Exception Types In CFCatch Blocks Do Not Have To Be Quoted
This is a really minor post, but this morning, I made a small syntax discovery regarding ColdFusion's CFTry / CFCatch statements - the error types do not have to be quoted. This is true even if the type contains a dot-delimited hierarchy. Here's a quick example:
<cfscript> | |
try { | |
throw( type = "Foo" ); | |
} catch ( "Foo" error ) { | |
writeOutput( "Caught Quoted: #error.type# <br />" ); | |
} | |
try { | |
throw( type = "Foo.Bar" ); | |
} catch ( "Foo.Bar" error ) { | |
writeOutput( "Caught Quoted: #error.type# <br />" ); | |
} | |
// ------------------------------------------------------ // | |
// Type value not quoted in CFCatch. | |
// ------------------------------------------------------ // | |
try { | |
throw( type = "Foo" ); | |
} catch ( Foo error ) { | |
writeOutput( "Caught Unquoted: #error.type# <br />" ); | |
} | |
try { | |
throw( type = "Foo.Bar" ); | |
} catch ( Foo.Bar error ) { | |
writeOutput( "Caught Unquoted: #error.type# <br />" ); | |
} | |
</cfscript> |
Notice that the type in the Catch block is only quoted in the first two Try/Catch statements, but not in the second two. When we run the above code, we get the following output:
Caught Quoted: Foo
Caught Quoted: Foo.Bar
Caught Unquoted: Foo
Caught Unquoted: Foo.Bar
All catch blocks worked as expected. Pretty cool!
Want to use code from this post? Check out the license.
Reader Comments
@All,
On a somewhat related note, apparently using JavaLoader interferes with the ability to target specific exceptions with the TYPE attribute of CFCatch:
http://www.compoundtheory.com/issue-with-cfcatch-and-javaloader/