On Wed, Jul 25, 2018 at 9:47 PM Nicholas Chammas <nicholas.cham...@gmail.com> wrote:
> > That is disingenuous, I think. Can this raise an AttributeError? >> > spam?.eggs?.bacon >> > Of course it can! And this is exactly the pattern used in many examples >> in >> > the PEP and the discussion. So the PEP would create a situation where >> code >> > will raise AttributeError in a slightly—and subtly—different set of >> > circumstances than plain attribute access will. >> > > food = spam?.eggs?.bacon > Can be rewritten as: > food = spam > if spam is not None and spam.eggs is not None: > food = spam.eggs.bacon > They both behave identically, no? Maybe I missed the point David was > trying to make. > No, you illustrate it perfectly! I had to stare at your translation for a while to decide if it was really identical to the proposed `spam?.eggs?.bacon`. The fact I have to think so hard makes the syntax feel non-obvious. Plus, there's the fact that your best effort at translating the proposed syntax is WRONG. Even a strong proponent cannot explain the behavior on a first try. And indeed, it behaves subtly different from plain attribute access in where it raises AttributeError. >>> spam = SimpleNamespace() >>> spam.eggs = None >>> spam.eggs.bacon AttributeError: 'NoneType' object has no attribute 'bacon' >>> # spam?.eggs?.bacon >>> # Should be: None >>> "Translation" does something different >>> food = spam >>> if spam is not None and spam.eggs is not None: ... food = spam.eggs.bacon >>> food namespace(eggs=None) -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/