old_contents: from decorator import decorator
  
  @decorator
  def trace(f, *args, **kw):
      r = f(*args, **kw)
      print "%s(%s, %s) = %s" % (f.func_name, args, kw, r)
      return r
  
new_contents: from decorator import decorator
  
  @decorator
  def trace(f, *args, **kw):
      try:
          r = f(*args, **kw)
      finally:
          print "%s(%s, %s) = %s" % (f.func_name, args, kw, r)
      return r
  
subject: Make our trace decorator a bit more robust