On 22 Feb 2014 22:15, "Stephen J. Turnbull" <step...@xemacs.org> wrote:
>
> Antoine Pitrou writes:
>  > On Sat, 22 Feb 2014 22:13:58 +1100
>  > Chris Angelico <ros...@gmail.com> wrote:
>
>  > > hasattr(x,"y") <-> (x.y or True except AttributeError: False)
>
>  > But it's not the same. hasattr() returns a boolean, not an arbitrary
>  > value.
>
> I think he meant
>
>     hasattr(x,"y") <-> (x.y and True except AttributeError: False)

With PEP 463, the explicit equivalent of hasattr() would be something like :

hasattr(x,"y") <-> (bool(x.y) or True except AttributeError: False)

The version Chris came up with was close, but as Antoine noted, didn't
ensure the result was always exactly True or False.

The translation isn't simple because we don't allow an "else" clause on the
except expression (and I agree with this limitation), so the first
expression needs to be one that will *evaluate* x.y, but ensure the result
of the expression is True if no exception is thrown.

However, as Chris noted in his reply, there are still cases where using
hasattr makes more sense, so the fact it *can* be written as an except
expression instead is a curiosity rather than anything with deep practical
implications.

Cheers,
Nick.

P.S. The fully general variant of "else" emulation under PEP 463:

((bool(EXPR) and False) or NO_EXC_RESULT except EXC: EXC_RESULT)

Note: never actually use this, it's effectively unreadable ;)

>
_______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
https://mail.python.org/mailman/options/python-dev/ncoghlan%40gmail.com
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to