On Monday, November 11, 2013 5:11:52 PM UTC-6, Chris Angelico wrote: > On Tue, Nov 12, 2013 at 9:51 AM, Rick Johnson > > 1. i believe win32 file paths require a qualifying volume > > letter. > They do not; omitting the drive letter makes the path relative to the > current drive (and since it doesn't start with a directory specifier, > the current directory).
Hmm. Let's confirm: >>> import os >>> os.path.exists("C:/Windows/System32") True >>> os.path.exists("/Windows/System32") True Yep, it's official. "Implicit File Path Resolution" I need to author a PyWart on this soon! > > 2. Never, ever, *EVER* write data to disc before confirming > > the paths your passing are pointing to the location you > > intended to write the data. Use os.path.exists(path) to test > > your paths BEFORE trying to write data. > Why? Why, oh why? If there's a problem, it'll be signalled > with an exception. Except when there's a problem that won't be signaled by an EXCEPTION, but will be signaled by EMOTIONS; like for instance removing the wrong directory or truncating the wrong file because of a typo in your source code. OPPS! :-'( > Testing that the path exists opens you up to race > problems, so you won't see anything now, but some day your > code will be in a concurrent situation and you'll get > unexpected exceptions. Why not just expect the exception? Because today i'm not facing a concurrent situation, so i'm not going to bother and protect from it. Just like i'm not facing a snake bite, so i won't bother to lug around a vial of antidote. Your attempts to discredit me via hypothetical scenarios is entertaining however. > This one's arguable. How often do you use the 'file' > builtin? I've worked with files in Python innumerable > times, and I don't remember the last time I used 'file'. > Yes, avoid shadowing important builtins like 'list' and > 'int', but 'id' and 'file' aren't that big a deal. My first concern is with the OP adopting "self documenting" names. Shadowing file is merely ensuring that the OP knows "file" is a builtin. Shadowing any builtin can create very difficult bugs to track. This is the point the OP should remember. > They won't float around forever. The garbage collector > will get to them. That depends on how they are stored. You make too many assumptions Chris. I don't have an problems with GC's, but i'm not about to write sloppy code and "assume" the GC is going to swoop in and save me like a feline trapped in a tree. > > 5. Remember, you cannot write a file into a directory that > > does not exist. > So? Exception thrown, traceback printed to console, > process terminated cleanly. I'm not seeing a problem here. Now you're just trolling! def firstdev(file): in_file = open("desktop/%s.txt") % file indata = in_file.read() out_file = open("desktop/newfolder/%s.txt", 'w') % file Just from reading that code NO ONE could know for sure if "newfolder" even existed BEFORE the OP tried to open the "out_file". Maybe the OP thinks that missing sub-directories are auto-created by the open function, but there's no way to know for sure, hence my comment. > > 6 For OS compatibility always use os.path.join() to join > > path parts into a whole. This method will insert the proper > > separator for you depending on the OS. > Technically true. However, most modern OSes will accept a > slash. There'll be a few situations where that's not true, > but the OP an happily just use slashes for simplicity. Many a developer have lived to regret those words. PS: I thought Steven was the official "devils advocate" around here? Hmm. I guess everyone needs a day off. -- https://mail.python.org/mailman/listinfo/python-list