Entrar
Usuário novo? Cadastre-se
python-brasil
? Você já é um associado? Entre no Yahoo!

Dicas

Você sabia...
Você pode fazer buscas no grupo por mensagens antigas.

Mensagens

  Ajuda
Avançado
Porque usar exceções?   Lista de mensagens  
Responder | Encaminhar Mensagem #35144 de 42622 |
Re: [python-brasil] Re: Porque usar exceções?

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
nalon@...



Sex, 12 de Set de 2008 1:10 pm

zenalon
Offline Offline
Enviar e-mail Enviar e-mail

Encaminhar Mensagem #35144 de 42622 |
Expandir mensagens Nome/E-mail Classificar por data

Perdoem caso a reposta para essa pergunta apareça no "estou com sorte" do google, talvez eu tenha usado uma chave infeliz na pesquisa :) De qualquer forma,...
Diego Pasqualin
diegopasqualin
Offline Enviar e-mail
10 de Set de 2008
12:12 am

Olá Diego, Com exceções vc extende o seu tratamento de erros. Além de, no caso de linguagens como Python, onde elas são objetos, permitir que haja...
Henrique Baggio
hnrqbaggio
Offline Enviar e-mail
10 de Set de 2008
12:33 am

Olá a todos! ... Henrique, entendi que o colega está querendo saber sobre a vantagem de se criar uma nova exceção. Imagino que provavelmente numa linguagem...
Marcelo Andrade
mfaelektron
Offline Enviar e-mail
10 de Set de 2008
12:39 am

Marcelo, Depois que enviei meu email eu pensei nisso também, mas é que eu fui mais pelo título do que pela mensagem dele. Falha minha... [As partes desta...
Henrique Baggio
hnrqbaggio
Offline Enviar e-mail
10 de Set de 2008
12:46 am

... Sobre o uso de if para tratamento de erros, realmente é mais rápido do que tratamento de exceção. Pelo menos foi o que já li a respeito....
Felipe Ferreri Tonello
chackalsjc
Offline Enviar e-mail
10 de Set de 2008
2:53 am

... Qualquer pessoa que está tão preocupada com performance a ponto de usar if em vez de try/except não devia estar usando Python, mas C. [ ]s Luciano...
Luciano Ramalho
hiper_luciano
Offline Enviar e-mail
11 de Set de 2008
3:27 pm

Qualquer pessoa que está tão preocupada com performance a ponto de usar if em vez de try/except não devia estar usando Python, mas C. Concordo plenamente,...
Francisco Antônio ...
franciscossouza@...
Enviar e-mail
11 de Set de 2008
9:15 pm

Ola, ... Um exemplo interessante e' o do jogo Snake (que o JS implementou, ele pode explicar melhor), onde ele criou uma excessao que era lancada quando o...
Bruno Gola
brunogola@...
Enviar e-mail
10 de Set de 2008
12:42 am

... Hash: SHA1 ... Hm, acho vai um pouco além disso... A grande vantagem de se criar novos tipos de exceção é poder saber (de uma maneira elegante) qual o...
Arthur Furlan
arthurfurlan
Offline Enviar e-mail
10 de Set de 2008
12:58 am

... Pense, por exemplo, quando você faz algum tipo de estrutura que será usada por outros programas, é importante que as mensagens de erro sejam claras e...
Paul Eipper
lkraider
Offline Enviar e-mail
10 de Set de 2008
2:26 am

... Precisamente! O código está em http://python-gamedev-brasil.googlecode.com/svn/trunk/snakes/ E voce vai ver bem isso -- eu crio uma exceção CobraMorreu...
Joao S. O. Bueno
gwidion23
Offline Enviar e-mail
10 de Set de 2008
3:50 am

Diego, Meu critério é usar if quando estou escrevendo um script com uma finalidade bem específica (e simples) ou para fazer uma inocente gambiarra*zinha*, ...
André Luiz Ribeir...
alsimoes
Offline Enviar e-mail
10 de Set de 2008
10:10 am

André, O objeto pode tratar suas próprias exceções, mas nem sempre deve é assim. Exemplo: Um objeto da classe Boleto tem os seguintes métodos:...
Marcos Douglas
marcos_douglas
Offline Enviar e-mail
10 de Set de 2008
1:20 pm

... Claro, ora, quando nenhuma das existentes é a mais adequada para você. Se não houvesse vantagem, teríamos só Exception e pronto... Em geral, quando...
Pedro Werneck
pedro_m_werneck
Offline Enviar e-mail
10 de Set de 2008
10:46 am

... <pjwerneck@...> escreveu ... Quando você espera apenas números naturais como retorno de uma função, a função pode retornar um número negativo para...
Diego Pasqualin
diegopasqualin
Offline Enviar e-mail
11 de Set de 2008
2:11 am

On 9 set, 21:12, "Diego Pasqualin" <diegopasqua...@...> ... Para trazer experiência de uma outra área... Quem já programou em C, provavelmente...
hcarvalhoalves
Offline Enviar e-mail
11 de Set de 2008
11:46 pm

... Acho que a vantagem maior nem é essa, de representar o erro com algo, mas em como simplifica as coisas por permitir agrupar tudo no lugar certo, sem ...
Pedro Werneck
pedro_m_werneck
Offline Enviar e-mail
12 de Set de 2008
12:31 am

... Pedro, no exemplo postado em C, o idioma para um bloco seria é o mesmo: #define ERRA 0x01 #define ERRB 0x02 #define ERRC 0x04 /* O seu try: */ errcode =...
hcarvalhoalves
Offline Enviar e-mail
12 de Set de 2008
9:36 pm

Olá! ... 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...
José Alexandre Nalon
zenalon
Offline Enviar e-mail
12 de Set de 2008
1:10 pm

... Indo um pouco para o off-topic... eu costumo usar um padrão mais prático e legível quando tenho esse tipo de problema, usando gotos. Para não entrar...
Adam Victor Nazareth ...
qbyron
Offline Enviar e-mail
12 de Set de 2008
2:52 pm
Avançado

Copyright © 2009 Yahoo! do Brasil Internet Ltda. Todos os direitos reservados.
Política de Privacidade - Termos do Serviço - Diretrizes - Ajuda