>
> Do you know what helps readability? *Learning to read*

Do you know what helps? *leveraging intuition*
If you're going to throw a question mark in there, which by the way, is far
more visually intrusive than a '.', then it makes more sense to at least
try to use it in a familiar way:

v = (a.b)?

## equivalent to

v = None
try:
    v = a.b
except AttributeError as e:
    if not e.args[0].startswith("'NonezType'"):
        raise e

Once you have learned to read ?. and friends, they will be as readable as .
> and
> slicing is now.


That's an assumption that's difficult to prove. If ?. gets added to Python
and proves to be a readability nightmare (as I believe it will be), it's
too late to go back. It's a gamble. The question is: is the potential
benefit worth the risk? and is there, perhaps, a better solution? I,
personally am not convinced of either. I think the 'maybe' solution seems
like a better alternative.

On Wed, Jul 25, 2018 at 9:40 PM, Chris Angelico <ros...@gmail.com> wrote:

> On Thu, Jul 26, 2018 at 12:30 PM, David Mertz <me...@gnosis.cx> wrote:
> > Btw. Here's a way of spelling the proposed syntax that gets the semantics
> > right:
> >
> >>>> # pip install coalescing
> >>>> NullCoalesce(spam).eggs.bacon
>
> Let's try it.
>
> rosuav@sikorsky:~$ sudo python3 -m pip install coalescing
> Collecting coalescing
>   Downloading https://files.pythonhosted.org/packages/f3/f4/
> 120f04cc59f9fa8c55c711b67f1c9c34d8a59c34cd69249e6ff61b098987
> /coalescing-0.1.1.tar.gz
> Installing collected packages: coalescing
>   Running setup.py install for coalescing ... done
> Successfully installed coalescing-0.1.1
>
> rosuav@sikorsky:~$ python3
> Python 3.8.0a0 (heads/literal_eval-exception:ddcb2eb331, Feb 21 2018,
> 04:32:23)
> [GCC 6.3.0 20170516] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> from coalescing import NullCoalesce
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> ModuleNotFoundError: No module named 'coalescing'
> >>> from coalesce import NullCoalesce
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "/usr/local/lib/python3.8/site-packages/coalesce.py", line 56,
> in <module>
>     import wrapt
> ModuleNotFoundError: No module named 'wrapt'
>
> A bit problematic. But after (a) figuring out that your module is
> named "coalesce" even though I installed "coalescing" AND (b) going
> and separately installing wrapt, and finally (c) doing the import that
> you didn't mention, we still have this fundamental problem:
>
> rosuav@sikorsky:~$ python3
> Python 3.8.0a0 (heads/literal_eval-exception:ddcb2eb331, Feb 21 2018,
> 04:32:23)
> [GCC 6.3.0 20170516] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> from coalesce import NullCoalesce
> >>> from types import SimpleNamespace
> >>> spam, spam.eggs, spam.eggs.bacon = SimpleNamespace(),
> SimpleNamespace(), 42
> >>> NullCoalesce(spam).eggs.bacon
> <NullCoalesce proxy for 42>
>
> That isn't 42. That's a thing that, forever afterwards, will be a
> proxy. And look at this:
>
> >>> spam.nil = None
> >>> print(NullCoalesce(spam).nil)
> <NullCoalesce proxy for None>
> >>> print(NullCoalesce(spam).nil.nil)
> None
> >>> print(NullCoalesce(spam).nil.nil.nil)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'NoneType' object has no attribute 'nil'
> >>>
>
> Whoooooops.
>
> So, no, this is most definitely NOT equivalent to the proposed semantics.
>
> ChrisA
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to