3
respostas

Dúvida sobre try - except

Olá, pessoal! Espero que todos estejam bem. Compreendi que o par de comandos try/else tenta executar algo e que, caso não seja possível, gera a saída do except. O código repassado no projeto é o que segue na figura abaixo, e não consegui entender ainda por que ele considera executar novamente a função main() (que está dentro do else) se e desconsidera o restante.
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Oi Fábio, tudo bem? 😊

A sua dúvida é muito comum! 🤔

O try/except funciona da seguinte forma:

  • O bloco dentro do try é executado.
  • Se ocorrer um erro durante a execução desse bloco, o Python interrompe a execução do try e procura por um bloco except que corresponda ao tipo de erro ocorrido.
  • Se um bloco except correspondente for encontrado, o código dentro desse bloco é executado.
  • Se nenhum erro ocorrer no bloco try, o bloco except é ignorado.

No seu código, o try tenta converter a entrada do usuário para um inteiro. Se o usuário digitar algo que não pode ser convertido para um inteiro (por exemplo, uma letra), um erro ocorrerá e o bloco except será executado.

Dentro do except, a função opcao_invalida() é chamada. Essa função provavelmente exibe uma mensagem de erro para o usuário.

Após o except, o programa continua a execução normalmente. No seu caso, após o except, o programa não faz nada.

A função main() é chamada dentro do bloco else. O bloco else é executado somente se nenhum erro ocorrer dentro do bloco try. No seu caso, o bloco else é executado somente se o usuário digitar um número inteiro válido.

Dentro do else, o programa verifica se a opção escolhida pelo usuário é válida (1 a 4). Se a opção for inválida, a função opcao_invalida() é chamada e a função main() é chamada novamente. Isso faz com que o programa volte ao início e peça para o usuário escolher uma opção novamente.

Em resumo:

  • O except é executado quando o usuário digita algo que não é um número inteiro.
  • O else é executado quando o usuário digita um número inteiro válido.
  • A função main() é chamada novamente quando o usuário digita uma opção inválida.

Espero ter ajudado a esclarecer sua dúvida! 💪

🎓 Para saber mais:

Olá, Fábio! Tudo certo?

No código que você compartilhou, a função main() é chamada novamente dentro do else do bloco try-except. Isso acontece porque, quando uma opção inválida é escolhida (ou seja, não é 1, 2, 3 ou 4), a função opcao_invalida() é executada. Dentro dessa função, após exibir a mensagem de "Opção Inválida", o programa espera que o usuário pressione uma tecla para retornar ao menu principal, chamando a função main() novamente.

O fluxo é assim:

  1. Usuário escolhe uma opção: Se for inválida, cai no else.
  2. opcao_invalida() é chamada: Mostra a mensagem de erro e espera uma tecla.
  3. Chama main(): Isso limpa a tela e exibe o menu novamente.

A ideia é manter o programa em execução contínua até que uma opção válida que finalize o programa (como a opção 4) seja escolhida. Isso melhora a experiência do usuário, evitando que o programa quebre com entradas inválidas.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigado, pessoal! Ficou bem claro agora para mim. Quando a tecla digitada era uma letra, por exemplo, a função main() está sendo retornada dentro da função opcao_invalida() do except e não dentro do else. Valeuzão!!!