Multi-line lambda proposal.

Duncan Booth duncan.booth at invalid.invalid
Thu May 11 13:20:38 EDT 2006


Kaz Kylheku wrote:

> Duncan Booth wrote:
>> One big problem with this is that with the decorator the function has
>> a name but with a lambda you have anonymous functions so your
>> tracebacks are really going to suck.
> 
> Is this an issue with this particular design that is addressed by
> other designs?

Yes. Decorators don't interfere with the name of the underlying function 
displayed in tracebacks.

> 
> Are the existing one-line lambdas free from this problem?

No, but since a single line lambda does virtually nothing it isn't as 
serious. Decorators are useful enough that in some situation you might 
decorate every method in a class (e.g. for a web application you might 
apply security settings with decorators). In that situation you have just 
messed up every stack frame in every traceback.
> 
> Is there really a problem? The Python tracebacks identify every frame
> by file and line number, as well as name, if one is available.

Great, and I suppose that if they printed out the line numbers in binary 
that wouldn't make it harder to understand the traceback either. I end up 
reading tracebacks quite a lot, and it is the sequence of the function 
names which matter first, I don't usually need to go and look at the file 
and code lines.

> 
> Let me make the observation that  name of an inner function is, alone,
> insufficient to identify that function in a debugging scenario. If you
> have some inner function called I, defined within function F, you need
> to know that it's the I inside F, and not some other I.
> 
If the stack frame shows I called from F then it is usually a pretty good 
guess that it means the I inside F. Besides, I don't usually name all my 
inner functions I; I find that giving them meaningful names tends to help.



More information about the Python-list mailing list