(lest we think I am completely incompetent ;), I have had success
catching all manner of FOREIGN_KEY_VIOLATION, UNIQUE_VIOLATION, CHECK_VIOLATION, NO_DATA_FOUND, etc. in other functions. So something is very different about this particular exception!)
It seems to me that it is not a normal exception and evades the exception clause. Any thoughts on where to go from here?
Hmm, maybe the error is not being thrown when/where you think it is? Coercions of constants, in particular, happen very early and might possibly need some contortions to catch. Could we see an exact example of what's not working for you?