Devo testar if
algo válido ou apenas try
fazê-lo e capturar a exceção?
- Existe alguma documentação sólida dizendo que uma maneira é preferida?
- É uma maneira mais pitônica ?
Por exemplo, devo:
if len(my_list) >= 4:
x = my_list[3]
else:
x = 'NO_ABC'
Ou:
try:
x = my_list[3]
except IndexError:
x = 'NO_ABC'
Algumas reflexões ...
PEP 20 diz:
Os erros nunca devem passar silenciosamente.
A menos que seja explicitamente silenciado.
O uso de um em try
vez de um deve if
ser interpretado como um erro passando silenciosamente? E se sim, você o está silenciando explicitamente usando-o dessa maneira, tornando-o correto?
Não estou me referindo a situações em que você só pode fazer as coisas de uma maneira; por exemplo:
try:
import foo
except ImportError:
import baz
if index in mylist
testa se o índice é um elemento da minha lista, não um índice possível. Você prefeririaif index < len(mylist)
.