[Python-ideas] Null coalescing operators
Terry Reedy
tjreedy at udel.edu
Tue Sep 22 00:45:04 CEST 2015
On 9/21/2015 5:48 PM, Guido van Rossum wrote:
> On Mon, Sep 21, 2015 at 2:23 PM, Terry Reedy
> <tjreedy at udel.edu
> <mailto:tjreedy at udel.edu>> wrote:
> I agree with Paul Moore that propagating None is generally a bad
> idea. It merely avoids the inevitable exception.
To me, this is the key idea in opposition to proposals that make
propagating None easier.
> I don't think the big issue is bool(x) being too broad. That's what the
> binary ?? operator is trying to fix, but to me the more useful operators
> are x?.y and x?[y], both of which would still require repetition of the
> part on the left when spelled using ??.
>
> This is important when x is a more complex expression that is either
> expensive or has a side-effect. E.g. d.get(key)?.upper() would currently
> have to be spelled as (some variant of)
> "None if d.get(key) is None else d.get(key).upper()"
> and the ?? operator doesn't really help for the
> repetition -- it would still be "d.get(key) ?? d.get(key).upper()".
>
> In general to avoid this repetition you have to introduce a local
> variable, but that's often awkward and interrupts the programmer's
> "flow".
try:
x = d.get(key).upper()
except AttributeError:
x = None
is also a no-repeat equivalent when d.values are all strings. I agree
than "x = d.get(key)?.upper()" is a plausible abbreviation. But I am
much more likely to want "x = ''" or another exception as the
alternative. I guess some other pythonistas like keeping None around
more than I do ;-).
--
Terry Jan Reedy
More information about the Python-ideas
mailing list