Suponhamos que eu receba uma variável por input de algum usuário qualquer de meu programa.
Esta variável estará em int ou float, por exemplo.
Se o usuário digitar uma letra no input o python encerra o programa e dá a mensagem de erro. Eu queria que ao invés disso ele dissesse o erro e fizesse a pergunta novamente da variável.
Exemplo:
num = int(input(" Numero ")) e o usuário digitar a letra "A"
ao invés do erro no python, quero que ele diga “Essa não é uma resposta válida” e pergunte novamente.
Talvez a idéia de fazer o tratamento da exceção dentro de um while (verdadeiro enquanto
lançar a exceção do tipo ValueError) o ajude.
Caso o usuário introduzir um valor que seja possível converter a float (com o int está tudo bem) a exceção é lançada, imprimindo a mensagem de erro e voltando ao raw_input.
Se a introdução não lançar nenhuma exceção (do tipo ValueError), vai ao break, saindo do while.
Um código em python2 seria ± assim:
# -*- coding: utf-8 -*-
while True:
try:
s = float(raw_input('Número: >> '))
break
except ValueError:
print 'Essa não é uma resposta válida\n'
print(""“Escolha uma das opções de ‘Olá mundo’:
[ 1 ] Verde
[ 2 ] Amarelo
[ 3 ] Vermelho”"")
try:
escolha = int(input("Qual das opções? ").strip())
if escolha == 1:
print("\033[1;32mOlá, mundo!\033[m")
elif escolha == 2:
print("\033[1;33mOlá, mundo!\033[m")
elif escolha == 3:
print("\033[1;31mOlá, mundo!\033[m")
else:
print("Opção não aceita! Escolha entre 1, 2 ou 3.")
except ValueError:
print(“COMANDO NÃO ACEITO!”)
(Obs. Esse foi meu codigo usando cores e outras coisas, mas o que vai resolver é colocar o TRY, e o if dentro dele. Caso o usuario digite outra coisa, o EXCEPT VALUEERROR vai resolver mostrando um print.
from decimal import Decimal, InvalidOperation
while True:
print('Please, enter a number:')
number = input()
try:
number = Decimal(number)
break
except InvalidOperation:
print('Invalid number')
print(f'Typed value: {number}')