[Python-ideas] Null coalescing operators

Sven R. Kunze srkunze at mail.de
Sat Sep 19 11:48:01 CEST 2015


On 19.09.2015 07:14, Stephen J. Turnbull wrote:
> A true SQL NULL type.  It's always bothered me that most ORMs map NULL
> to None but there are plenty of other ways to inject None into a
> Python computation.  (This probably isn't a practical suggestion
> either unless Random832's suggestion of ?() establishing a lexical
> context were adopted.)

I definitely agree here. Internally, we have a guideline telling us to 
avoid None or NULL whenever possible. Andrew's remark about 'code smell' 
is definitely appropriate.


There was a great discussion some years ago on one of the RDF semantics 
mailing list about the semantics of NULL (in RDF). It turned out to have 
6 or 7 semantics WITHOUT any domain-specific focus (don't know, don't 
exists, is missing, etc. -- can't remember all of them). I feel that is 
one reason why Python programs should avoid None: we don't guess.

> The point is that Maybe behavior is at least theoretically useful in
> subcategories, with special objects other than None.
>
> Sven's suggestion of calling this the "monad" operator triggers a
> worry in me, however.  In Haskell, the Monad type doesn't enforce the
> monad laws, only the property of being an endofunctor.  That
> apparently turns out to be enough in practice to make the Monad type
> very useful.  However, in Python we have no way to enforce that
> property.  I don't have the imagination to come up with a truly
> attractive nuisance here, and this operator doesn't enable general
> functorial behavior, so maybe it's not a problem.

Sleeping one night over it, I now tend to change my mind regarding this. 
Maybe, it's *better to DEAL with None as in remove* *them* from the 
code, from the database, from the YAML files and so forth *instead**of 
*making it easier to work with them. Restricting oneself, would 
eventually lead to more predictable designs.

Does this makes sense somehow?


Issue is, None is so convenient to work with. You only find out the code 
smell when you discover a "NoneType object does not have attribute X" 
exception some months later and start looking where the heck the None 
could come from. What can we do here?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150919/95d0490c/attachment.html>


More information about the Python-ideas mailing list