They are not discouraged.
However, your example is silly because you do not need an exception and you could for example accidentally have typos in your list.index
code, which would trigger your exception, and you would never know.
Use exceptions and catch them if you know what exception you are catching -- and it's not trivial to do a "look before you leap" check (like it is in your example). Often that won't be the case. However, in your example it is.
Oh, and try to avoid a blanket except:
catch (especially if you know how you expect your try
to fail). That can easily enable bad practice since you pretty much by definition have no idea what your call might do/raise. If your application requires this (such as the server example pointed out by Paul in comments) that is fine, but if you are trying to lookup a value in a list? That's... not good.
As a good example of why this isn't good combined for your example:
try:
id = list.idex(42)
except:
print("42 not found")
else:
print("ID: ", id)