I've always learned that this is the correct way to open a file when you're not sure that the file exists. A file can disappear between a call to os.path.exists and the actual read. Anyway, you should also check permissions then?