On Wed, Jul 25, 2018 at 9:20 PM Chris Angelico <rosuav@gmail.com> wrote:
On Thu, Jul 26, 2018 at 11:02 AM, David Mertz <mertz@gnosis.cx> 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.

I don't understand. If it were to raise AttributeError, it would be
because spam (or spam.eggs) isn't None, but doesn't have an attribute
eggs (or bacon). Exactly the same as regular attribute access. How is
it slightly different? Have I missed something?

That was my reaction, too.

    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.