On Wed, Jul 25, 2018 at 11:09 PM David Mertz <me...@gnosis.cx> wrote:
> On Wed, Jul 25, 2018 at 10:50 PM Nicholas Chammas < > nicholas.cham...@gmail.com> wrote: > >> Indeed. Thanks for the counter-example. I think the correct translation >> is as follows: >> food = spam?.eggs?.bacon >> Becomes: >> food = None >> if spam is not None and spam.eggs is not None: >> food = spam.eggs.bacon >> > Did I get it right now? :) >> > > Nope, still not right, I'm afraid! > > Chris Angelica provided a more accurate translation. > Forgive me for being slow. I'm missing what's different in semantics between the translation above and Chris's translation below: _tmp = spam > if _tmp is not None: > _tmp = _tmp.eggs > if _tmp is not None: > _tmp = _tmp.bacon > food = _tmp > What's a case where they would do something different? * If spam is None, they work the same -> None * If spam is not None, but spam.eggs exists and is None, they work the same -> None * If spam is not None, but spam.eggs doesn't exist, they work the same -> AttributeError * If spam is not None, and spam.eggs is not None, but spam.eggs.bacon is None, they work the same -> None * If spam is not None, and spam.eggs is not None, but spam.eggs.bacon doesn't exist, they work the same -> AttributeError * If spam is not None, and spam.eggs is not None, and spam.eggs.bacon is not None, they work the same -> bacon
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/