I generally prefer exceptions to result codes. You can even use the mechanism to throw useful results across nested function calls.
I do prefer Maybe/Option/Either style returns in some cases though. Makes for a cleaner API.
So each method has its uses.