RELEASED Python 2.4, alpha 2

Anthony Baxter anthonybaxter at gmail.com
Thu Aug 5 12:41:10 EDT 2004


On Thu, 5 Aug 2004 12:29:51 -0400, Christopher T King <squirrel at wpi.edu> wrote:
> What does one do if a decorator raises an exception?  

def deco(func):
      raise TypeError

@deco
def foo():
    print "hello"



> If it's something
> necessary to the functioning of the code (say, classmethod or
> staticmethod), then all is as it should be.  But what if it's not?  What
> if you're using a run-time type checking library, or a code optimizer,
> that may not be installed?  In that case you would most likely want to let
> that decoration fail silently. 

Silently failing is completely non-pythonic. If you really wanted to 
handle a missing decorator, something like 
missingdec = lambda x:x 
would do this for you.

> Decorators in general are the right solution for the wrong problem (as I
> detailed in another thread).  They are being introduced much too
> prematurely, and have not been given time to be able to have been thought
> through well enough.  The @ syntax is the result of trying to shoehorn too
> many solutions into one fix.

Too prematurely?? staticmethod and classmethod were introduced in 2.2!
PyObjC, ctypes, Jython and IronPython can all do with using them, as can
rather a lot of other chunks of code. Anything that applies metadata to 
functions can use this - look at all the various places where people are 
putting stuff in docstrings as a current hack.

> They purport to solve the problems of function type declaration
> (class/static), function attributes, runtime type checking, and general
> function mangling, when each of these (save general function mangling)
> already have distinct solutions in nearly every other language.  The first
> three problems are currently implemented as hacks in Python that happen to
> fall under the category of "general function mangling".  Streamlining the
> hack is not the answer.

Or, alternately, they're another tool in the toolbox, along with
metaclasses and
the like.

Anthony



More information about the Python-list mailing list