Python/Conceitos básicos/Erros e exceções

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

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![editar | editar código-fonte]

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 Grace Hopper) é melhor do que a primeira (LBYL, ou look before you leap)[1].

Referências[editar | editar código-fonte]

  1. Glossary, site docs.python.org