Python/Conceitos básicos/Erros e exceções
Erros são humanos e sempre ocorrem ao escrevermos programas, sejam simples ou complexos, o modo de como as linguagens de programação nos retornam estes erros é que há mudança. Em Python, podem serem tratados muito elegantemente.
O erro do Python é chamado de Traceback que é uma pilha criada quando ocorre a exceção. Guido van Rossum escreveu na documentação oficial que “quando ocorre uma exceção, o interpretador procura por um bloco de tratamento de exceções e então começa a desempilhar cada elemento da pilha de execução. Então desta forma saberemos quantos níveis depois do tratador de erros que houve a exceção”. O que condiz com a explicação do capítulo sobre Análise léxica.
Abaixo alguns erros e seus tracebacks:
>>> a = [5, 4, 3, 2] >>> print a[5] Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: list index out of range
Há a possibilidade de:
>>> a = 'livro' >>> try: ... print a + 1 ... except TypeError, erro: ... print "Um erro ocorreu: %s" % erro Um erro ocorreu: cannot concatenate 'str' and 'int' objects
Erros são bem vindos!
Um fato importante sobre o estilo da linguagem Python é que o programa deve, preferencialmente, cometer erros e tratá-los, ao invés de checar se a operação dará erro.
Assim, se temos um vetor v de tamanho desconhecido, porém que, normalmente, terá mais de 10 elementos, e queremos modificar (se existir) seu décimo elemento, é possível fazê-lo de duas formas:
... if len(v) >= 10: v[9] = 666 else: print "Erro: v tem menos de dez elementos"
ou:
... try: v[9] = 666 except: print "Erro: v tem menos de dez elementos"
Considera-se que a segunda forma (EAFP, ou it's easier to ask for forgiveness than permission, frase atribuída a Predefinição:W) é melhor do que a primeira (LBYL, ou look before you leap)[1].