Re:A Python Guide for the Ages
by montebicyclelo on Saturday December 25, 2021 @09:35AM
(#29683633)
What's the advantage over the following?:
for i in range(n):
if search(i) == val:
break
raise KeyError("not found")
found_index = iThat version doesn't work. It raises KeyError on the first iteration if the if statement is false.
The point of the for / else is that the else only gets evaluated when the for terminates without a break. So in the example you only get a KeyError if the search() never returns val.
Part of the confusion I guess is that the else: in my example is paired with for, not with if, Python indentation being significant etc.
Re:A Python Guide for the Ages
by montebicyclelo on Sunday December 26, 2021 @02:30AM
(#29690467)
Aha, thank you. Yes, it's plausible that my brain did pair the `else` with the `if`, even though it knew it was supposed to be paired with the `for`.
Before being introduced to `for`/`else`, I'd have written the example you gave as:
result = None
for i in range(n):
if search(i) == val:
result = i
if not result:
raise KeyError("not found")
ETA: Another pattern where it's really useful is to replace
with a safer guaranteed terminating loop,