Fórum Ubuntu Linux - PT
21 de Maio de 2013, 07:35 *
Olá, Visitante. Faça o login ou registre-se.
Perdeu o seu e-mail de ativação?

Login com nome de usuário, senha e duração da sessão
Notícias: Informações da última versão: Ubuntu Linux 13.04 -Raring Ringtail
 
   Home   Ajuda Regras Pesquisa Login Registre-se  
Anúncios
Páginas: [1]   Ir para o fundo
  Imprimir  
Autor Tópico: Python - duvida quanto ao tratamento de erros [Solucionado]  (Lida 1067 vezes)
HDD_Man
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 73


Ver Perfil
« em: 26 de Fevereiro de 2012, 19:23 »

Ola pessoal!

estou estudando pyhton, dai fiquei pensando na tratativa de erros causados pelos usuários, e como resolve-los.
como ainda sou iniciante, provavelmente ainda não cheguei nisso pelos artigos que estou estudando. mas eles estão se aprofundando e não trataram essas questões meio básicas, dai estou travado nisso.

exemplo:
a = raw_input ("Digite um numero")
#a pessoa vai la e digita uma letra.

isso eu aprendi resolver aqui:
http://www.rodrigor.com.br/disciplinas/2010.1/introprog/material/string-checar_inteiro_float

agora, ficou uma ultima duvida..

como eu faço pro programa não terminar??

exemplo:
você digita a letra ao invés do número, daí ele avisa que não é número. Mas dai ele dá um Break!!
Mas pela lógica, ele precisa retornar ao começo do teste, e realizá-lo até que o usuário "aprenda" a digitar o número!


Como faço isso?


Obrigado desde já!
« Última modificação: 02 de Agosto de 2012, 21:37 por HDD_Man » Registrado
irtigor
Equipe Ubuntu
Usuário Ubuntu
*****
Deslogado Deslogado

Mensagens: 3.212


Delete, delete, delete!


Ver Perfil
« Responder #1 em: 26 de Fevereiro de 2012, 21:25 »

Use um laço: http://docs.python.org/tutorial/errors.html#handling-exceptions
Registrado
Darcamo
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 1.289


Ver Perfil
« Responder #2 em: 27 de Fevereiro de 2012, 12:19 »

Em python ao invés de checar uma coisa é possível e depois executá-la, acho que é mais comum vc simplesmente tentar executá-la e tratar a exceção caso isso não seja possível. Por exemplo

Código:
from exceptions import ValueError

idade = -1

while idade < 0:
    idade = input("Digite sua idade\n")

    # Tenta interpretar a idade fornecida como um número válido. Caso não
    # seja possível seta a idade como -1 para continuar no laço while.
    try:
        idade = int(idade)
    except ValueError:
        idade = -1

print("Sua idade é {0}".format(idade))
Registrado
HDD_Man
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 73


Ver Perfil
« Responder #3 em: 29 de Fevereiro de 2012, 00:28 »

pessoal, não sei, acho que não me expressei muito bem. Por outro lado, deu pra ver o quao criativo o ser humano pode ser ao inventar um codigo para um teste como esse. Varios jeitos! Muito interessante!

o teste em si, com esse codigo, ja resolvia

idade_str = input("Digite sua idade")
if idade_str.isdigit():
    print("idade é um número inteiro válido")
else
    print("idade não é um número inteiro")
>>>

mas, vejam acima: o programa acabou!
eu nao quero que acabe!
quero que ele fique pedindo pra pessoa ate ela digitar um numero valido!!! (um float)



pelo que me lembro, tem uma função que vi no delphi uma vez, chamada goto.
eu vi que não é usada em python e nas linguagens de hoje em dia, mas basicamente, eu queria enviar a execução de volta pro começo, senao o programa acaba!

pela lógica, vejo três jeitos para fazer isso:
1- usar uma função semelhante ao goto para jogar a execução de volta pro começo.
2- executar o programa novamente ao chegar ao fim (uma função que rode o programa novamente)
3- bloquear tudo o que não é numero ou ponto no teclado (já vi isso, mas acho que ainda nao é pra mim).

enfim, alguem poderia me dar uma luz? prefiro a opção 1, mas pode ser que eu nao esteja entendendo a logica de maneira correta...

resumindo:
o programa deveria continuar com o teste até a pessoa digitar um numero valido


Obrigado a todos!!
Registrado
Darcamo
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 1.289


Ver Perfil
« Responder #4 em: 29 de Fevereiro de 2012, 01:36 »

O código que eu postei faz isso. Caso a idade seja inválida, seja porque é negativa ou porque ele não conseguiu interpretar como um número inteiro (mude "int" para "float", já que você quer float).

A ideia é que caso ele não consiga entender a idade fornecida como um número então a linha
Código:
idade = int(idade)
vai gerar uma exceção do tipo ValueError. A estrutura "try ... except" vai capturar essa exceção e setar a idade como "-1" exatamente para que o programa não saia do laço while e pergunte a idade novamente. Ou seja, o programa vai pedir a idade novamente se a pessoa digitar uma letra.
Registrado
irtigor
Equipe Ubuntu
Usuário Ubuntu
*****
Deslogado Deslogado

Mensagens: 3.212


Delete, delete, delete!


Ver Perfil
« Responder #5 em: 29 de Fevereiro de 2012, 01:46 »

"goto" não é considerado uma boa prática de programação, por isso não existe em algumas linguagens (principalmente nas mais novas). Entretanto, existe um módulo goto em python (repare que, apesar de alegadamente funcionar, ele foi criado como um piada de 1 de abril).

Em poucas palavras: use um laço.
Registrado
HDD_Man
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 73


Ver Perfil
« Responder #6 em: 29 de Fevereiro de 2012, 07:32 »

O código que eu postei faz isso. Caso a idade seja inválida, seja porque é negativa ou porque ele não conseguiu interpretar como um número inteiro (mude "int" para "float", já que você quer float).

A ideia é que caso ele não consiga entender a idade fornecida como um número então a linha
Código:
idade = int(idade)
vai gerar uma exceção do tipo ValueError. A estrutura "try ... except" vai capturar essa exceção e setar a idade como "-1" exatamente para que o programa não saia do laço while e pergunte a idade novamente. Ou seja, o programa vai pedir a idade novamente se a pessoa digitar uma letra.

Ola pessoal!
acho que nao tinha entendido muito bem entao o codigo do irtigor. eu mudei ele pro meu exercicio dai nao funcionou.
vou estudar melhor o codigo e depois volto a postar.
Obrigado a todos!
Registrado
HDD_Man
Usuário Ubuntu
*
Deslogado Deslogado

Mensagens: 73


Ver Perfil
« Responder #7 em: 02 de Agosto de 2012, 21:36 »

Ola pessoal!

andei estudando uma apostila mais aprofundada e aprendi.

obrigado a todos!
Registrado
Páginas: [1]   Ir para o topo
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Tema desenvolvido por FaBMak e n3t0
Powered by SMF 1.1.18 | SMF © 2006-2009, Simple Machines
© 2013 Canonical Ltd. Ubuntu e Canonical são marcas registradas da Canonical Ltd.
XHTML 1.0 válido! CSS válido!