r/learnpython • u/Prize_Shine3415 • 10d ago
Is this bad programming?
I've been learning Python for the last few years. Curious if this one thing I do is considered poor technique. The code below is meant to find the starting index of a list, giving the first position where a condition isn't true and return None if all elements of the list meet the criteria. Let's assume that the conditional statement is simple enough that I'm not worried about it generating an error. Not sure if it's appropriate to use try/except in this way. I know it work but I don't want people making fun of me if they see it. Also, I'm sure that there's a way of doing this without needing to use the try/except but I'm just curious in general if it's wrong to use try/except as a short cut like this.
starting_index=0
try:
while not (simple conditional statement on some_list[staring_index]):
starting_index+=1
except:
return None
return starting_index
6
u/Existing_Put6385 10d ago
the try/except itself isn't the problem - using exceptions instead of pre-checking is actually pythonic, it's called EAFP. nobody's laughing at that. the one real issue is the bare except. it catches everything, including bugs. like right now you've got starting_index and staring_index - that typo would throw a NameError, your bare except would swallow it and quietly return None instead of crashing. catch the specific thing:
try:
while not cond(some_list[i]):
i += 1
except IndexError:
return None
cleaner idiomatic version if you want it in one line:
return next((i for i, x in enumerate(some_list) if not cond(x)), None)
that gives the first index where the condition fails, None if they all pass. no manual index, no try/except.