Capa
Seções
NOTÍCIAS

DOWNLOAD

ANÁLISES

COMPRAS

BOLETIM

WIRED NEWS

IDG NOW!

PC WORLD

AJUDA

COLUNISTAS


 digite + enter


COMO TRATAR UM ERRO DE VERDADE
Luciano Ramalho MAGNET

A terceira versão da nossa somadora ainda não chegou lá: tratamos da mesma forma a situação em que usuário não digitou nada e aquela onde ele digitou algo que não é um número válido em Python. Pode ser que o usuário seja um datilógrafo à moda antiga, que digita L minúsculo no lugar do dígito 1. Ou ainda alguém que quer usar, com toda razão, a "," como separador decimal (Python só aceita números com ponto decimal). Para diferenciar um tipo de erro do outro, e saber quando o usuário apenas quer encerrar o programa, precisamos guardar a linha que ele digitou antes de tentar transformá-la em um número. Veja como na listagem 6.

Listagem 6

  1 # somadora4.py - somadora infinita - versao 4
  2
  3 print 'Digite os valores a somar seguidos de .'
  4 print 'Para encerrar apenas .'
  5 total = 0
  6 while 1:
  7     try:
  8         linha = raw_input(':')
  9         n = float(linha)
 10         total = total + n
 11     except:
 12         if len(linha) == 0:
 13              break
 14     elif ',' in linha:
 15              print 'Use o . (ponto) como separador decimal.'
 16     else:
 17              print 'Isso nao parece um numero valido.'
 18 print 'TOTAL: %s' % total

Vamos analisar as novidades dessa versão:

Linha 8: a nova variavel linha armazena a linha digitada pelo usuário, para verificação posterior.

Linha 9: a linha é convertida em número.

Linha 11: início do bloco que tratará os erros, provavelmente ocorridos na linha 9.

Linha 12: a função len() retorna o número de itens de uma seqüência; nesse caso, o número de caracteres da string linha. Se o número é igual a zero, então a string está vazia.

Linha 13: no caso da string vazia, executamos um break porque o usuário não quer mais digitar.

Linha 14: o operador in (em) retorna verdadeiro se o item à esquerda for encontrado na seqüência à direita; nesse caso verificamos se existe uma vírgula dentro da string linha.

Linha 15: como encontramos uma vírgula, vamos supor que o usuário tentou digitar um número fracionário. Então vamos sugerir que ele use o ponto decimal. Nesse caso, não executamos o break. Nenhum outro comando no bloco if/elif/else será executado, e o loop recomeçará de novo a partir da linha 6.

Linhas 16 e 17: aqui vamos tratar todos os demais casos, dizendo que o que foi digitado não se parece com um número. Novamente, sem o break, o loop reiniciará, e logo o sinal ':' aparecerá na tela aguardando nova digitação.

» Associação de nomes a valores »

Copyright © 1999 MAGNET
Introdução

Somadora infinita

Mais sobre o while

Loops (quase) infinitos

Um programa mais tolerante

Como tratar um erro de verdade

Associação de nomes a valores

Resolvendo o Orçamento da República

Nossa primeira simulação

Copyright© 1996 - 2003 Terra Networks S.A. Todos os direitos reservados. All rights reserved.