If you are going to check return codes how is that different, other than stylistically from putting try/except blocks around things? You have to do error checking and handling for either case, in the case of exceptions you have a default action (abort) and a detailed message, in the case of return codes your app weaves drunkenly along with incorrect/corrupt data doing bad things.