Rob Cliffe via Python-ideas writes:
> Steven d'Aprano wrote:
> > You don't have to agree with Serhiy's preference to recognise that there
> > are cases where this proposal will save no lines of code. And probably
> > not rare cases -- I expect that they will be much more common than the
> > short examples you quote:
> >
> >> If you read the PEP you will find plenty of short examples:
> >>
> >> process(dic[key] except KeyError: None)
> >> value = (lst[2] except IndexError: "No value")
> >> cond = (args[1] except IndexError: None)
> >> pwd = (os.getcwd() except OSError: None)
> >> e.widget = (self._nametowidget(W) except KeyError: W)
> >> line = (readline() except StopIteration: '')
> >> etc.
> > The first is a poor example because that can so easily be written as:
> >
> > process(dic.get(key))
I disagree with Steven here to the extent that one purpose of the PEP
is to provide a common idiom that allows us to express this *without*
proliferating methods like dict.get. I hope he will unpack this by
arguing "d.get(k)" is *better* than "(d[k] except KeyError: None)".
Given my present understanding of the situation, I would be perfectly
happy with an outcome where methods like dict.get were deprecated (as
a matter of style and TOOWTDI, I don't mean DeprecationWarning) in
favor of the uniform except-clause syntax, unless there's a reason
this syntax is *bad*. There are many times I choose to split a long
if-else expression across lines, and others where I choose the
statement form, and of course I use "x or default" instead of "x if x
else default". I see no reason why this construct wouldn't "work" the
same way, although it might be much less common (then again, it might
be *more* common than if-else expressions).
The kind of anti-except-expression argument I have in mind can be
exemplified using the fourth example:
pwd = (os.getcwd() except OSError: None)
where I would find the argument that this really is an environmental
condition that probably shouldn't be papered over with "pwd=None" in
almost all contexts, and therefore should be emphasized with a try
*statement*, pretty plausible. But that might be a style argument
("use 'try', not 'except' expressions when the Error indicates a
broken environment rather than an uncommon but reasonable state"),
rather than an argument that we *should not* unify these usages with a
single idiom.
Interestingly, Steven takes the opposite position:
> > The fourth example of os.getcwd is excellent.
I just don't know. "Infinite are the arguments of mages." ;-)
Steve
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/KZFK5GB3W7RW67F4CXD73QD4OIKMTMAF/
Code of Conduct: http://python.org/psf/codeofconduct/