1
resposta

Desafio: hora da prática - Aquecimento

1. Divisão com tratamento de erros

try:
num1 = float(input("Digite o primeiro número: "))
num2 = float(input("Digite o segundo número: "))
resultado = num1 / num2
print(f"Resultado da divisão: {resultado}")
except ZeroDivisionError as e:
print("Erro:", e, "- Não é possível dividir por zero.")
except ValueError as e:
print("Erro:", e, "- Entrada inválida, digite apenas números.")

2. Consulta em dicionário com KeyError

idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}

nome = input("Digite o nome: ")

try:
valor = idades[nome]
print(f"{nome} tem {valor} anos.")
except KeyError:
print("Nome não encontrado")

3. Função para converter lista em float

def converte_lista(lista: list) -> list:
try:
lista_float = [float(x) for x in lista]
return lista_float
except Exception as e:
print("Erro:", e)
finally:
print("Fim da execução da função")

Teste
print(converte_lista([1, 2, "3.5"]))
print(converte_lista([1, "abc", 3]))
4. Função para agrupar listas em tuplas
python
def agrupa_listas(lista1: list, lista2: list) -> list:
try:
if len(lista1) != len(lista2):
raise IndexError("A quantidade de elementos em cada lista é diferente.")
resultado = [(a, b, a+b) for a, b in zip(lista1, lista2)]
return resultado
except Exception as e:
print("Erro:", e)

Testes
lista1 = [4,6,7,9,10]
lista2 = [-4,6,8,7,9]
print(agrupa_listas(lista1, lista2)) # sem erro

lista1 = [4,6,7,9,10,4]
lista2 = [-4,6,8,7,9]
print(agrupa_listas(lista1, lista2)) # erro de tamanho

lista1 = [4,6,7,9,'A']
lista2 = [-4,'E',8,7,9]
print(agrupa_listas(lista1, lista2)) # erro de tipo

1 resposta

Oi, Penha! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Trabalhar com tratamento de erros em Python é uma habilidade importante, e você demonstrou isso muito bem nos quatro exercícios enviados.

No primeiro exercício, a divisão com try e except ficou bem estruturada. O uso de num1 e num2 com float garante que o input do usuário seja convertido corretamente, e o tratamento separado de ZeroDivisionError e ValueError mostra atenção aos diferentes tipos de falha que podem surgir. No segundo exercício, a consulta ao dicionário com except KeyError é uma solução elegante para evitar que o programa quebre quando o nome digitado não existe.

As funções converte_lista e agrupa_listas também merecem destaque. O finally em converte_lista demonstra cuidado com o fluxo da execução, independentemente do resultado obtido. Já o raise IndexError dentro de agrupa_listas é um uso maduro do tratamento de exceções, validando o tamanho de lista1 e lista2 antes de processar os dados.

Uma dica interessante para o futuro é utilizar isinstance() para validar tipos antes de realizar operações matemáticas com os elementos de uma lista. Isso ajuda a prevenir erros durante a soma. Veja este exemplo:


lista = [1, 2, "3", 4]

for item in lista:
    if isinstance(item, (int, float)):
        print(item + 1)
    else:
        print("valor invalido")

Nesse código, isinstance() verifica se o valor é numérico antes de executar a operação, tornando o programa mais robusto e confiável. Esse tipo de validação complementa muito bem o uso de try e except que você já praticou.

Qual dos quatro exercícios você considerou mais desafiador de implementar com tratamento de exceções?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!