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/