How to pop the interpreter's stack?
Ethan Furman
ethan at stoneleaf.us
Fri Dec 24 17:14:42 EST 2010
Carl Banks wrote:
> On Dec 24, 1:24 am, Steven D'Aprano <steve
> +comp.lang.pyt... at pearwood.info> wrote:
>> On Thu, 23 Dec 2010 22:38:05 -0800, Carl Banks wrote:
>>> OTOH, going the extra mile to hide useful information from a user is
>>> asinine. As a user, I will decide for myself how I want to use
>>> implementation-defined information, and I don't want the implementor to
>>> decide this for me. It's bad enough if an implementor fails to provide
>>> information out of laziness, but when they deliberately do extra work to
>>> hide information, that's self-importance and arrogance.
>> But that of course is nonsense, because as the user you don't decide
>> anything of the sort.
>
> As a user I can criticize the decision of the implementor to
> needlessly filter information, and declare that it's borne out of the
> author's arrogance in thinking he knows what I want when I get a
> traceback.
>
> I can also opine that Python language shouldn't make it easy for
> library implementors to be arrogant like this.
>
>> The developer responsible for writing the function
>> decides what information he provides you, starting with whether you get
>> an exception at all, where it comes from, the type of exception, and the
>> error message (if any). Once this information has been passed on to you,
>> you're free to do anything you like with it, but you never get to choose
>> what information you get -- I'm not suggesting any change there. All I'm
>> suggesting is that there should be a way of reducing the boilerplate
>> needed for this idiom:
>>
>> def _validate_arg(x):
>> if x == 'bad input': return False
>> return True
>>
>> def f(arg):
>> if not _validate_arg(arg):
>> raise ValueError
>> process(arg)
>>
>> to something more natural that doesn't needlessly expose implementation
>> details that are completely irrelevant to the caller.
>
> Arrogance. Who gave you the right to decide what is completely
> irrelevant to user? I, as the user, decide what's relevant. If I
> want implementation-dependent information, it's my business.
>
> I don't want the language to make it easy for arrogant people, who
> think they know what information I want better than I do, to hide that
> information from me.
One of the many things I love about Python is that it stays out of the
way of me getting my work done. I think a truly pythonic
program/library/module must do the same. So in this regard I agree with
Carl.
There are also times when I change the exception being raised to match
what python expects from that type of object -- for example, from
WhatEverException to KeyError for a dict-like object. So in this regard
I agree with Steven.
For kj's concern, which seems to be along the lines of functional as
opposed to custom object, I don't think the traceback should be monkied
with -- either use a decorator to keep the traceback short, or give the
_pre_func name a good name and don't worry about it. I know when I see
a traceback, I start at the bottom and only work my way up if I need to.
~Ethan~
More information about the Python-list
mailing list