Porque usar excessões?

Uma discussão interessante levantada (já que estamos falando de excessões) no grupo de discussão python é sobre os motivos para se usar excessões. Dentre as respostas uma me chamou atenção:


Olá!

> Eu vejo as exceções como uma evolução natural desse idioma, a
> diferença é que ao invés de usar um código de erro sem sentido, você
> tem um objeto próprio para representar a exceção.

Há uma outra diferença brutal entre o uso da checagem dos
códigos de retorno e o tratamento de exceções. Foi uma das
coisas que me revoltou em C quando comecei a fazer coisas
sérias com a linguagem.

Imagine que você tenha um algoritmo relativamente complexo,
onde diversas coisas podem dar errado -- por exemplo, abrir
um arquivo, verificar se ele existe, verificar se foi aberto,
alocar memória para ler o arquivo, fechá-lo, etc. Cada erro
deve ser tratado de alguma forma (em alguns casos, abortar o
programa, em outros, tentar corrigir, etc.). Esse tratamento
precisa ser feito em uma seqüência adequada -- então, por e-
xemplo, se houver algum problema num dos últimos passos do
processamento, seria necessário 'voltar' ao estado original
(desalocando memória, fechando arquivos, emitindo mensagens
de erro, etc.), e precisa ser feito imediatamente (se a me-
mória não pôde ser alocada, ler o arquivo vai causar uma fa-
lha de segmentação). Em C, cada linha de código necessitaria
de uma série de 'ifs' logo em seguida para checar cada pos-
sibilidade. A implementação da lógica do programa ficaria
soterrada pelas checagens de erro, tornando a manutenção mui-
to, muito mais complicada. Só escrever este parágrafo quase
me fez entrar em pânico. :)

Em Python -- e na verdade, em qualquer linguagem que conte-
nha tratamento de erros via exceções -- você coloca toda a
lógica do algoritmo sem precisar se preocupar com erros, co-
mo se eles não existissem. E, _após isso_, você especifica
como tratar cada erro que ocorreu. Não precisa se preocupar
com a ordem das coisas, ou se uma operação pode ou não ser
executada. A operação do bloco 'try' é imediatamente abor-
tada e levada ao bloco 'except' correspondente. Com isso, a
implementação fica extremamente mais limpa, fácil de ler, mo-
dificar e manter.

Nesse caso, voltando ao tópico original, o uso de exceções
novas (criadas pelo programador) não apenas é útil como mui-
tas vezes recomendável. Permite ao programador isolar as con-
dições de erro que podem ocorrer, permitindo um tratamento
mais adequado -- e além disso serve como 'documentação inter-
na': uma exceção com um bom nome indica o tipo de erro que
pode acontecer na execução de um programa. Não consigo pen-
sar em um exemplo realmente simples neste momento para mos-
trar o código, mas já usei essa habilidade da linguagem em
diversas situações.

--
José Alexandre Nalon
na...@terra.com.br

Nenhum comentário:

Postar um comentário

Insira seu comentário - O mesmo será submetido à aprovação!

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo