On Sep 9, 2009, at 4:50 PM, r wrote:

On Sep 9, 3:18 pm, David C Ullrich <dullr...@sprynet.com> wrote:
(snip)
These days I've actually got the syntax and spelling memorized -
I can type "close()" without needing to look it up!

+1

You are so right David! I think some people around here need to look
up "code reuse". Here are a couple of simple templates for our friends
to study...

def read_file(fname, mode='rb'):
   '''open file and return contents'''
   try:
       f = open(fname, mode)
       s = f.read()
       return s
   except:
       return 0
   finally:
       f.close()

def write_file(fname, s, mode='wb'):
   '''open file, truncate, and write string'''
   try:
       f = open(fname, mode)
       f.write(s)
       return 1
   except:
       return 0
   finally:
       f.close()


Unfortunately, both of these simple templates have the following problem -- if open fails, a NameError will be raised from the finally block.


def read_file(fname, mode='rb'):
   '''open file and return contents'''
   f = open(fname, mode)
   try:
       return f.read()

   finally:
       f = f.close()

I removed the except block because I prefer exceptions to error codes.

def write_file(fname, s, mode='wb'):
   '''open file, truncate, and write string'''
   f = open(fname, mode)
   try:
       f.write(s)

   finally:
       f = f.close()

In addition to fixing the latent bug in the second simple template, I took the opportunity to correct your heinous violation of command- query separation.


Charles Yeomans

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to