Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] comando try/except

Quando digito uma opção string, o programa apenas finaliza, não aparece mensagem alguma não encontro onde está o erro

import os

def exibir_nome_do_programa():
    print("""
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░  
""")

def exibir_opcoes():
    print('1. Cadastrar restaurante')
    print('2. Listar restaurantes')
    print('3. Ativar restaurante')
    print('4. Sair\n')

def finalizar_app():
    os.system('cls')
    # os.system('clear') caso Mac
    print('Finalizando o app')

def opcao_invalida():
    print('Opção inválida')
    input('Pressione qualquer tecla para voltar ao menu principal')
    main()

def cadastrar_restaurante():
    os.system('cls')
    print('Cadastre seu restaurante')
    input('Digite o nome do seu restaurante:  ')
    main()

def escolher_opcao():
    try:
        opcao_escolhida = int(input('Escolha uma opção: '))
        # opcao_escolhida = int(opcao_escolhida)

        if opcao_escolhida == 1: 
            cadastrar_restaurante()
        elif opcao_escolhida == 2: 
            print('Listar restaurantes')
        elif opcao_escolhida == 3: 
            print('Ativar restaurante')
        elif opcao_escolhida == 4: 
            finalizar_app()
        else:
            opcao_invalida()   
    except:
        opcao_invalida        

def main():
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()

if __name__ == '__main__':
    main()
1 resposta
solução!

Seu programa em Python parece ser um sistema simples de gerenciamento de restaurantes via console. Aqui estão algumas sugestões e observações:

  1. Nomenclatura de Funções e Documentação:

    • Considere usar nomes de funções mais descritivos para melhorar a legibilidade do código.
    • Adicione docstrings às funções para fornecer documentação.
  2. Exibição do Menu:

    • Talvez seja interessante limpar a tela antes de exibir o menu para manter a interface limpa. A linha os.system('cls') faz isso em sistemas Windows, mas para compatibilidade multiplataforma, considere usar uma biblioteca como clear-screen.
  3. Manipulação de Entrada:

    • A entrada para o nome do restaurante na função cadastrar_restaurante parece estar faltando uma atribuição de variável. Você deve armazenar o nome do restaurante digitado para processamento posterior.
  4. Tratamento de Exceções:

    • É bom que você tenha um bloco try-except para lidar com entradas inválidas. No entanto, a função opcao_invalida não está sendo chamada corretamente. Você deve usar parênteses para chamá-la: opcao_invalida().
  5. Loop:

    • Considere adicionar um loop para permitir que o usuário realize várias ações sem reiniciar o programa.
  6. Feedback ao Usuário:

    • Forneça feedback ao usuário após a realização de uma ação (por exemplo, "Restaurante registrado com sucesso", "Opção inválida", etc.).
  7. Sair do Aplicativo:

    • Considere usar um loop ou uma função dedicada para lidar com a opção de saída para torná-lo mais limpo.

Aqui está uma versão modificada incorporando algumas dessas sugestões:

import os

def exibir_nome_do_programa():
    """Exibe o nome do programa."""
    print("""
    Seu ASCII Art Aqui
    """)

def exibir_opcoes():
    """Exibe as opções do menu."""
    print('1. Cadastrar restaurante')
    print('2. Listar restaurantes')
    print('3. Ativar restaurante')
    print('4. Sair\n')

def finalizar_app():
    """Finaliza a aplicação."""
    os.system('cls')  # Use 'clear' para Mac/Linux
    print('Finalizando a aplicação')

def opcao_invalida():
    """Lida com uma opção inválida."""
    print('Opção inválida')
    input('Pressione qualquer tecla para voltar ao menu principal')

def cadastrar_restaurante():
    """Cadastra um restaurante."""
    os.system('cls')
    print('Cadastre seu restaurante')
    nome_restaurante = input('Digite o nome do seu restaurante: ')
    print(f'Restaurante "{nome_restaurante}" cadastrado com sucesso')
    input('Pressione qualquer tecla para voltar ao menu principal')

def escolher_opcao():
    """Escolhe uma opção do menu."""
    try:
        opcao_escolhida = int(input('Escolha uma opção: '))

        if opcao_escolhida == 1:
            cadastrar_restaurante()
        elif opcao_escolhida == 2:
            print('Listar restaurantes')
        elif opcao_escolhida == 3:
            print('Ativar restaurante')
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except ValueError:
        opcao_invalida()

def main():
    """Função principal para executar o programa."""
    exibir_nome_do_programa()

    while True:
        exibir_opcoes()
        escolher_opcao()

if __name__ == '__main__':
    main()

Essa versão modificada inclui um loop para manter o programa em execução até que o usuário escolha sair. Além disso, fornece mais feedback ao usuário após certas ações.