On Dec 31, 2019, at 14:58, Soni L. <[email protected]> wrote:
>
>
>> On 2019-12-31 7:28 p.m., Andrew Barnert via Python-ideas wrote:
>>
>> The second is an “if try” statement, which tries an expression and runs the
>> body if that doesn’t raise (instead of if it’s truthy), but jumps to the
>> next elif/else/statement (swallowing the exception) if it does. The actual
>> value of the expression is discarded, but the walrus operator takes care of
>> that:
>>
>> if try 0, y, z := vec:
>> # do yz plane stuff
>> elif try x, 0, z := vec:
>> # do xz plane stuff
>> elif try x, y, 0 := vec:
>> # do xy plane stuff
>> elif x, y, z := vec:
>> # do slow/imprecise/whatever 3D stuff
>> else:
>> raise TypeError(f'{vec} is not a 3-vector!')
>>
>> Alternatively, this could just be a try expression that can be used
>> anywhere: it’s truthy if evaluating doesn’t raise, falsey if it does. But I
>> don’t think it’s needed anywhere but if/elif.
> while try?
Yeah, maybe.
One of the inspirations here was Swift’s if let, and Swift does have a
corresponding while let—which isn’t useful nearly as often, but is definitely
useful sometimes. The first example I found online is this:
var view: UIView? = self
while let superview = view.superview {
count += 1
view = superview
}
… which seems like it would make sense in Python:
view = self
while try view := view.superview:
count += 1
… even if it actually works for a different reason (we’re not ending when we
fail to bind the value out of an Optional that’s nil, but when we try to access
an attribute on a value that’s None).
I suppose if it is worth doing, we do need to actually think about just if try,
or if try and while try, or a general purpose try expression, rather than just
crossing our fingers and saying YAGNI.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/JM5Z3KG72TBHQP4XQ76L6MMX2MDA3NG4/
Code of Conduct: http://python.org/psf/codeofconduct/