How do I prevent user input from resulting in a ValueError, and ask the program to rephrase the [duplicate]

0

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

My problem:

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

If the user types a string for example soon after 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!"

and then re-execute the input request.

Edit:

It worked, but when I call the variable says it has not been defined, sorry for the stupidity how do I solve this problem?

NameError: name 'QuantityCables' is not defined

I did as follows:

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 made a test to see if the value is correct I need to be inserted between 3 and 6:

(Here I have not 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: "))
    
asked by anonymous 03.04.2018 / 20:04

1 answer

1

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

The solution to this (there is no trigger of the exception) passes conventionally by 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())

STATEMENT

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)

STATEMENT

Add : By comment / edit question, you know 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())

STATEMENT

    
03.04.2018 / 20:07