1
resposta

Outra opção para tratar o erro ValueError: invalid literal for int()

Utilizei o try except para tratar o erro de ValueError, pois não caia no else, gostaria de saber se teria outra forma de realizar a tratativa caso o úsuario colocasse algo além de um inteiro.

Segue o código:

 import os

def par_ou_impar(numero):

    try:
        numero = int(numero)
    except ValueError:
        print(f'{numero} não é um valor valido')
        return

    if numero % 2 == 0:
        print(f'O número {numero} é par')
    elif numero % 2 !=0:
        print(f'O número {numero} é ímpar')
        
def main():
    os.system('cls')
    numero = input('Digite um número \n')
    par_ou_impar(numero)

if __name__ == '__main__':
    main()
1 resposta

Oii, William.

Que legal que você está praticando e já pensando em como melhorar.

O uso do try...except que você implementou é, na verdade, a forma mais pythônica (o padrão recomendado na comunidade Python) de lidar com isso. Mas, existem outras abordagens interessantes, especialmente se você quiser evitar que o programa pare ou se quiser validar antes de tentar converter.

1. Utilizando métodos de string (isdigit):

Se você quer verificar se a entrada é composta apenas por números antes mesmo de tentar a conversão, pode usar o método .isdigit().

numero_input = input('Digite um número: ')

if numero_input.isdigit():
    numero = int(numero_input)
    if numero % 2 == 0:
        print(f'O número {numero} é par')
    else:
        print(f'O número {numero} é ímpar')
else:
    print(f'"{numero_input}" não é um número inteiro válido.')

Nota: O isdigit() funciona bem para números inteiros positivos. Se o usuário digitar um número negativo (ex: -5), ele retornará False por causa do sinal de menos.

2. Melhorando a experiência com um laço de repetição (while):

Uma técnica muito usada é "prender" o usuário em um laço até que ele digite um valor correto. Assim, o programa não termina com um erro, ele apenas pede a informação novamente.

def pedir_numero():
    while True:
        entrada = input('Digite um número: ')
        try:
            return int(entrada)
        except ValueError:
            print(f'Ops! "{entrada}" não é um número. Tente novamente.')

# Uso:
numero = pedir_numero()
if numero % 2 == 0:
    print(f'O número {numero} é par')
else:
    print(f'O número {numero} é ímpar')

3. Pequena observação sobre o elif no seu código

No seu código original, você usou:

if numero % 2 == 0:
    # ...
elif numero % 2 != 0:
    # ...

Como um número ou é par ou é ímpar (não há uma terceira opção), você pode usar apenas o else. Isso deixa o código mais limpo e rápido, pois o computador não precisa fazer uma segunda conta matemática para verificar o que já é óbvio por exclusão.

Resumo das abordagens:

MétodoVantagemDesvantagem
Try/ExceptLida com qualquer erro de conversão e é o padrão da linguagem.Pode parecer um pouco "verboso" para scripts muito pequenos.
isdigit()Simples e evita a "exceção".Não reconhece números negativos ou decimais.
While LoopGarante que o programa só continue com um dado válido.Requer cuidado para não criar um laço infinito por erro de lógica.

Continue assim!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!