I disagree. I think exceptions should be generated when a function cannot do what it is supposed to do. For example, matching a string against a regexp cannot be done if the regexp is invalid. On the other hand, it can be done if the string simply doesn't match, in that case you get an empty result.