The "normal" third option is Maybe or Option types. (Though if you squint, that can look like returning an error with an unusual encoding.)<p>The solution proposed here looks like setting a thread property on error, and if you don't clear it, then subsequent function calls fail (if I read that right). Personally, I don't love it. I prefer my error handling to be open rather than hidden.