News for hackers. Stuff that matters.
Re:A Python Guide for the Ages by 63 on Saturday December 25, 2021 @02:49AM (#29681329)
"else" usually means "instead of" or "otherwise" in those patterns. If the original case doesn't run, then the else case runs instead.

In a for loop, the else clause only runs if the loop successfully completes (isn't broken), so the else in for-else means the total opposite of what it means in every other pattern.

I think it would make a lot more sense if it were replaced with "done" or "upon" or something else that communicates how it works.

Re:A Python Guide for the Ages by housecarpenter on Sunday December 26, 2021 @11:38PM (#29699302)
It depends on whether you think of the break as success or failure. When I write a loop with a break it's usually some kind of search where the break happens once you've found something, and in that case the break is more of a success.
Re:A Python Guide for the Ages by jermy on Saturday December 25, 2021 @06:06AM (#29682246)
The way you describe is how it worked in zope templates (allowing a 'no items here' text if there was nothing to iterate over in a list) - it was frustrating that the later python implementation was different.
Re:A Python Guide for the Ages by ptx on Saturday December 25, 2021 @09:34AM (#29683619)
You could read it as "either process all of these elements, or otherwise do this other thing". If we break, we're not processing all of the elements (the normal case), so we do the "else" part instead.

Edit: This is wrong. See replies.

Re:A Python Guide for the Ages by 63 on Saturday December 25, 2021 @10:01AM (#29683815)
That would make total sense if it were correct. That's exactly how I think most people would intuit it

However, that's exactly how it doesn't work and that's my point. The else clause is only ran if the loop DOESN'T break.

Re:A Python Guide for the Ages by ptx on Saturday December 25, 2021 @10:34AM (#29684085)
Hmm! Yes, you're right. Even though I knew exactly how it works and I sometimes use it, I still got confused, so maybe it is a confusing feature after all. :)