Fix Python – Better to ‘try’ something and catch the exception or test if it’s possible first to avoid an exception?

Should I test if something is valid or just try to do it and catch the exception?

Is there any solid documentation saying that one way is preferred?
Is one way more pythonic?

For example, should I:
if len(my_list) >= 4:
x = my_list[3]
else:
x = ‘NO_ABC’

Or:
try:
x = my_list[3]
except IndexError:
x = ‘NO_ABC’

Some thoughts…
P….