Tratamento de Erros (PYTHON)

Home Fóruns Python Tratamento de Erros (PYTHON)

Visualizando 3 respostas da discussão
  • Autor
    Posts
    • #103554
      Hudson Barbosa
      Participante

      No Mundo 3 – PYTHON – Exercício 113

      O professor propõe uma solução quase igual a essa:

      def leiaInt(msg):
      while True:
      try:
      n = int(input(‘Número: ‘))
      except (ValueError, UnboundLocalError, TypeError, NameError):
      print(f'<<ERRO>> Você digitou “{n}”. Não é um número inteiro. REPITA!’)
      continue
      else:
      return n

      # Programa principal
      num = leiaInt( ‘Digite um número: ‘ )
      print(f’Você acabou de digitar o número {num}’)

      –> O PROBLEMA É QUE O MEU PYCHARM NÃO ACEITA ESSA SOLUÇÃO E AINDA CONTINUA MOSTRANDO OS ERROS.
      –> ALGUÉM PODERIA ME AJUDAR? É POSSÍVEL CONVERSAR COM ALGUM INSTRUTOR DIRETAMENTE?

    • #103785
      IcaroFilho
      Moderador

      Boa Tarde Hudson.
      1- Poderia mandar este código formatado ( para checar se a indentação esta correta )
      2- Qual seria o erro que o seu pycharm mostra ?

      3- Você pode chamar os erros pelo Exception e dar um apelido para depois chamar.
      ex1:

      def leiaInt(msg):
          while True:
              try:
                  n = int(input(msg))
                  print(n[0])
                  
              except Exception as err:
                  print('err  :',err  )
                  continue
              else:
                  return n
      
      # Programa principal
      num = leiaInt( 'Digite um número: ' )
      print(f'você acabou de digitar o número {num}')

      este trecho te retornara um TypeError com a seguinte mensagem err : 'int' object is not subscriptable

      ex2: com base no seu código

      def leiaInt(msg):
          while True:
              try:
                  n = int(input(msg))
              except Exception as err:
                  print('err  :',err  )
                  continue
              else:
                  return n
      
      # Programa principal
      num = leiaInt( 'Digite um número: ' )
      print(f'você acabou de digitar o número {num}')

      segue abaixo a DOC do python referente a exceptions
      <LINK>
      É possível entrar em contato direto via Discord.

    • #103916
      Hudson Barbosa
      Participante

      Icaro, o código que usei foi esse:

      def leiaInt(msg):
      while True:
      try:
      n = int(input(‘Número: ‘))
      except (ValueError, UnboundLocalError, TypeError, NameError):
      print(f'<<ERRO>> Você digitou “{n}”. Não é um número inteiro. REPITA!’)
      continue
      else:
      return n

      # Programa principal
      num = leiaInt(‘Digite um número: ‘)
      print(f’Você acabou de digitar o número {num}’)

      O erro, eu tentei te mandar um print pelo e-mail, mas não consigo então vou colar abaixo:

      Traceback (most recent call last):
      File “C:\Users\Hud\PycharmProjects\pythonexercicios\ex 113 – FUNÇÕES APROFUNDADAS EM PYTHON – Módulo 3 – ESTRUTURAS COMPOSTAS.py”, line 11, in leiaInt
      n = int(input(‘Número: ‘))
      ValueError: invalid literal for int() with base 10: ‘ç’

      During handling of the above exception, another exception occurred:

      Traceback (most recent call last):
      File “C:\Users\Hud\PycharmProjects\pythonexercicios\ex 113 – FUNÇÕES APROFUNDADAS EM PYTHON – Módulo 3 – ESTRUTURAS COMPOSTAS.py”, line 20, in <module>
      num = leiaInt(‘Digite um número: ‘)
      File “C:\Users\Hud\PycharmProjects\pythonexercicios\ex 113 – FUNÇÕES APROFUNDADAS EM PYTHON – Módulo 3 – ESTRUTURAS COMPOSTAS.py”, line 13, in leiaInt
      print(f'<<ERRO>> Você digitou “{n}”. Não é um número inteiro. REPITA!’)
      UnboundLocalError: local variable ‘n’ referenced before assignment

    • #103919
      Hudson Barbosa
      Participante

      Me desculpe. Não envia a indetação aqui. Me mande um e-mail seu para te enviar

      • #103922
        IcaroFilho
        Moderador

        Isto se dá pois a var ‘n’ não teve seu valor atribuído devido a tipagem incorreta *(quando o valor inserido for diferente de inteiro).
        faça como eu mostrei, de um alias para a exceção e chame ela dentro do print. Ex:

        import traceback
        
        def leiaInt(msg):
            while True:
                try:
                    n = int(input('Número: '))
                  
                except (ValueError, UnboundLocalError, TypeError, NameError) as err:
                    print("".join(traceback.format_exception_only(type(err), err)).strip())
                    print(repr(err))
                    print(str(err))
                    print(err.args[0])
                    
                    continue
                else:
                    return n
        
        num = leiaInt('Digite um número: ')
        print(f'Você acabou de digitar o número {num}')
Visualizando 3 respostas da discussão
  • Você deve fazer login para responder a este tópico.