1
resposta

(07. Python para Dados: Lidando com exceções) Desafio: hora da prática

# 1. QUESTÃO
try:
    num1 = float(input("Digite o primeiro número: "))
    num2 = float(input("Digite o segundo número: "))

    divisao = num1 / num2

except ZeroDivisionError:
    print("Erro: não é possível dividir por zero.")

except ValueError:
    print("Erro: você deve digitar apenas números.")

else:
    print(f"Resultado da divisão: {divisao}")

finally:
    print("Programa encerrado.")
    
    
# 2. QUESTÃO
idades = {
    'Júlia': 16,
    'Carol': 23,
    'Alberto': 19,
    'Roberta': 17
}

try:
    nome = input("Digite um nome: ")
    resultado = idades[nome]

except KeyError:
    print("Nome não encontrado")

else:
    print(f"Idade: {resultado}")
    
    
# 3. QUESTÃO
def converter_para_float(lista):
    try:
        lista_float = [float(valor) for valor in lista]

    except ValueError as erro:
        print(f"Erro do tipo ValueError: {erro}")

    except TypeError as erro:
        print(f"Erro do tipo TypeError: {erro}")

    else:
        return lista_float

    finally:
        print("Fim da execução da função")

lista = ['1.5', 'abc', '3']
resultado = converter_para_float(lista)
print(resultado)


# 4. QUESTÃO
def agrupar_listas(lista1, lista2):
    try:
        if len(lista1) != len(lista2):
            raise IndexError(
                'A quantidade de elementos em cada lista é diferente.'
            )

        resultado = []

        for i in range(len(lista1)):
            tupla = (
                lista1[i],
                lista2[i],
                lista1[i] + lista2[i]
            )

            resultado.append(tupla)

    except IndexError as erro:
        print(f"Erro do tipo IndexError: {erro}")

    except TypeError as erro:
        print(f"Erro do tipo TypeError: {erro}")

    else:
        return resultado

    finally:
        print("Fim da execução da função")


# 5. QUESTÃO
def corrigir_provas(gabarito, testes):
    try:
        notas = []

        for teste in testes:
            nota = 0

            for i in range(len(teste)):

                if teste[i] not in ['A', 'B', 'C', 'D']:
                    raise ValueError(
                        f"A alternativa {teste[i]} não é uma opção de alternativa válida"
                    )

                if teste[i] == gabarito[i]:
                    nota += 1

            notas.append(nota)

    except ValueError as erro:
        print(f"Erro: {erro}")

    else:
        return notas


# 6. QUESTÃO
def verificar_pontuacao(lista):
    try:
        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}".'
                )

    except ValueError as erro:
        print(f"Erro: {erro}")

    else:
        print("Texto sem pontuações.")


# 7. QUESTÃO
def divide_colunas(pressoes, temperaturas):
    try:

        if len(pressoes) != len(temperaturas):
            raise ValueError(
                "As listas precisam ter o mesmo tamanho."
            )

        resultados = []

        for pressao, temperatura in zip(pressoes, temperaturas):

            if temperatura == 0:
                raise ZeroDivisionError(
                    "Não é possível dividir por zero."
                )

            resultados.append(pressao / temperatura)

    except ValueError as erro:
        print(f"Erro do tipo ValueError: {erro}")

    except ZeroDivisionError as erro:
        print(f"Erro do tipo ZeroDivisionError: {erro}")

    else:
        return resultados

    finally:
        print("Fim da execução da função.")
1 resposta

Olá, Eduardo! Tudo bem?

Ótima resolução! Você não apenas resolveu o desafio, como entregou um código limpíssimo, extremamente organizado e seguindo as melhores práticas de tratamento de exceções no Python.

Mapear cenários de erro é uma das habilidades mais importantes para quem trabalha com dados, pois garante que nossos scripts não parem de rodar no meio de uma análise pesada por causa de uma inconsistência nos dados de entrada.

Parabéns pelo excelente desempenho em todo o desafio! Você demonstrou um domínio muito sólido dessa estrutura.

Desses blocos que você implementou (try, except, else, finally), teve algum que você sentia mais confusão antes de fazer a prática e que agora ficou mais claro?

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!