S
Steven D'Aprano
I have found myself writing functions rather like these:
def openfile(filename):
if filename == '-':
# convention for shell scripts in Unix-land is to use
# '-' for stdin/stdout for reading/writing.
outfile = sys.stdout
if filename == '2-':
outfile = sys.stderr
else:
outfile = file(filename, 'w')
return outfile
def closefile(fileobj):
# don't close standard file objects, or their replacements
if not fileobj in (sys.stdout, sys.stderr, sys.stdin,
sys.__stdout__, sys.__stderr__, sys.__stdin__):
fileobj.close()
def processfile(filename):
outfile = openfile(filename)
try:
# lots of processing here, which may raise exceptions
var = "stuff happens"
outfile.write(var)
finally:
closefile(outfile)
A question:
I know I'm being paranoid about not closing files I shouldn't close, but
am I being excessively paranoid, or not paranoid enough?
Suggestions for improvements welcome; while I'm happy to read suggestions
using the new with statement, I can't yet rely on having Python 2.5 or
better so I have to stick to try...finally.
def openfile(filename):
if filename == '-':
# convention for shell scripts in Unix-land is to use
# '-' for stdin/stdout for reading/writing.
outfile = sys.stdout
if filename == '2-':
outfile = sys.stderr
else:
outfile = file(filename, 'w')
return outfile
def closefile(fileobj):
# don't close standard file objects, or their replacements
if not fileobj in (sys.stdout, sys.stderr, sys.stdin,
sys.__stdout__, sys.__stderr__, sys.__stdin__):
fileobj.close()
def processfile(filename):
outfile = openfile(filename)
try:
# lots of processing here, which may raise exceptions
var = "stuff happens"
outfile.write(var)
finally:
closefile(outfile)
A question:
I know I'm being paranoid about not closing files I shouldn't close, but
am I being excessively paranoid, or not paranoid enough?
Suggestions for improvements welcome; while I'm happy to read suggestions
using the new with statement, I can't yet rely on having Python 2.5 or
better so I have to stick to try...finally.