How do I prevent user input from resulting in a Valueerror, and ask the program to redo the question

Asked

Viewed 1,253 times

0

I need to learn how to check if the input will result in a Valueerror, and then re-run the input request until the value is an integer.

My problem:

QuantidadeCabos = int(input("Digite a quantidade de cabos: "))

If the user type a string for example then soon I already get this error message

ValueError: invalid literal for int() with base 10: 'teste'

I wanted to prevent this error and warn the user for example "Enter an integer number!"

and then immediately re-run the input request.


Edit:

It worked, but when I call the variable it says it hasn’t been defined,?

Nameerror: name 'Quantidadecabos' is not defined

I did it this way:

def perguntacabos():
QuantidadeCabos = input("Digite a quantidade de cabos: ")
try:
    return int(QuantidadeCabos)
except ValueError as err:
    print("Digite um Número inteiro!")
return perguntacabos()

I called the function:

perguntacabos()

And then I ran a test to see if the value is correct need to be inserted between 3 and 6:

(Here I haven’t changed anything yet , what do I do to work?)

while QuantidadeCabos < 3 or QuantidadeCabos > 6:
    print("Digite um valor entre 3 e 6!")
    QuantidadeCabos = int(input("Digite a quantidade de cabos: "))

1 answer

1


You can avoid’re-calling' input().

The solution to this (no Trigger exception) conventionally passes through a block try/catch:

try:
    int(input("Digite a quantidade de cabos: "))
except ValueError as err:
    print('format errado') # value error

recursive solution:

def return_int():
    QuantidadeCabos = input("Digite a quantidade de cabos: ")
    try: 
        return int(QuantidadeCabos)
    except ValueError as err: # formato errado
        print('Formato errado')
    return return_int() # repetir a pergunta

print("Quantidade de cabos: ", return_int())

DEMONSTRATION

iterative solution:

while True: # enquanto nao houver break
    QuantidadeCabos = input("Digite a quantidade de cabos: ")
    try:
        int(QuantidadeCabos)
        break # tudo bem pode retornar
    except ValueError as err:
        print('Formato errado')
print("Quantidade de cabos: ", QuantidadeCabos)

DEMONSTRATION

Addition: By comment/question editing I knew you want the value to be between 3 and 6, so you can:

def return_int():
    try: 
        QuantidadeCabos = int(input("Digite a quantidade de cabos: "))
    except ValueError as err: # formato errado
        print('Formato errado')
    else: # caso o try seja bem sucedido, haja o cast para int
        if(3 < QuantidadeCabos < 6): # verificamos se QuantidadeCabos maior que 3 e menor que 6
            return QuantidadeCabos # tudo bem, retornar valor
        print("Digite um valor entre 3 e 6!")
    return return_int() # repetir a pergunta

print("Quantidade de cabos: ", return_int())

DEMONSTRATION

Browser other questions tagged

You are not signed in. Login or sign up in order to post.