Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Mensagem no raise

lista_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa', 'versátil',
                  'e', 'fácil', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos', 'desde',
                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial']

lista_nao_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa,', 'versátil',
                  'e', 'fácil,', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos,', 'desde',
                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial!']

try:
    def avaliador(lista:list) -> bool:
        for palavra in lista:
            if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:
                raise ValueError(f'O texto apresenta pontuações na palavra {palavra}')
            else:
             continue
        return True
except Exception as e:
   print(type(e))
else:
   resultado = avaliador(lista_tratada)  
   print(resultado)
finally: 
    print('Avaliação encerrada') 

Na linha: raise ValueError(f'O texto apresenta pontuações na palavra {palavra}') a mensagem na saída quando colocado a lista não tratada, não aparece a substituição da palavra não tratada pela variavel saida: raise ValueError(f'O texto apresenta pontuações na palavra {palavra}' ) Pq não consigo fazer com que mostre a palavra? Obs: Já fiz colocando como índice (lista[i]) ou jogando dentro de uma variável, também não deram certo

2 respostas
solução!

Olá, Beatriz! Parece que você está com um problema na estrutura do seu código.

O bloco try e except está fora da função e, por isso, não está capturando a exceção que você está levantando dentro da função avaliador.

O que está acontecendo é que a função avaliador está sendo definida dentro do bloco try, mas não está sendo chamada lá. Então, quando você chama a função avaliador no bloco else, a exceção não está sendo capturada pelo bloco try e except.

Aqui está uma sugestão de como você pode reestruturar seu código:

def avaliador(lista:list) -> bool:
    for palavra in lista:
        if ',' in palavra or '.' in palavra or '!' in palavra or '?' in palavra:
            raise ValueError(f'O texto apresenta pontuações na palavra {palavra}')
        else:
            continue
    return True

try:
    resultado = avaliador(lista_nao_tratada)  
    print(resultado)
except Exception as e:
    print(type(e))
    print(str(e))
finally: 
    print('Avaliação encerrada') 

Nesse caso, a função avaliador é definida fora do bloco try e except. Dentro do bloco try, chamamos a função avaliador com a lista_nao_tratada. Se a função levantar uma exceção, ela será capturada pelo bloco except, que imprimirá o tipo e a mensagem da exceção.

Espero ter ajudado e bons estudos!

AAAAA, muito obrigada, agora sim fez total sentido.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software