Pular para o conteúdo principal

Aula 13: Entrada/Saída e Tratamento de Exceções


Objetivos de Aprendizagem

Ao final desta aula, você será capaz de:

  1. Capturar entrada do usuário com input() e converter para o tipo correto
  2. Abrir, ler e escrever arquivos de texto usando open() e o gerenciador with
  3. Identificar os modos de abertura de arquivo: r, w, a
  4. Usar try/except para tratar exceções e evitar que erros encerrem o programa
  5. Combinar leitura de arquivo, estruturas de dados e escrita de resultado

Conteúdo Teórico

1. Entrada do Usuário com input()

A função input() pausa o programa e aguarda o usuário digitar algo, retornando o texto digitado como uma string.

nome = input("Digite seu nome: ")
print(f"Olá, {nome}!")

Convertendo o tipo

input() sempre retorna str. Para usar o valor como número, é necessário converter:

idade = int(input("Digite sua idade: "))
preco = float(input("Digite o preço: "))
Dica prática

Sempre que pedir um número ao usuário, converta explicitamente. Sem conversão, "5" + "3" resulta em "53" (concatenação de strings), não 8.

Exemplo: média de notas via teclado

quantidade = int(input("Quantas notas? "))
notas = []

for i in range(quantidade):
nota = float(input(f"Nota {i + 1}: "))
notas.append(nota)

media = sum(notas) / len(notas)
print(f"Média: {media:.2f}")

2. Leitura e Escrita de Arquivos

Programas que leem e escrevem arquivos persistem dados entre execuções — as informações não se perdem quando o programa termina.

Abrindo um arquivo com open()

arquivo = open("dados.txt", "r") # abre para leitura
# ... operações ...
arquivo.close() # sempre fechar ao terminar

Os principais modos de abertura:

ModoSignificadoArquivo existeArquivo não existe
"r"LeituraAbre normalmenteFileNotFoundError
"w"EscritaApaga e recriaCria novo arquivo
"a"Acrescentar (append)Mantém conteúdo, escreve no finalCria novo arquivo
"r+"Leitura e escritaAbre normalmenteFileNotFoundError

O gerenciador with — forma recomendada

O with garante que o arquivo seja fechado automaticamente, mesmo que ocorra um erro:

with open("dados.txt", "r") as arquivo:
conteudo = arquivo.read()
# arquivo é fechado automaticamente aqui
Por que usar with?

Esquecer de chamar arquivo.close() pode causar perda de dados ou travamento do arquivo. O with elimina esse risco — é a forma recomendada pela comunidade Python.


3. Lendo Arquivos

.read() — lê o arquivo inteiro como uma string

with open("texto.txt", "r", encoding="utf-8") as f:
conteudo = f.read()
print(conteudo)

.readlines() — lê todas as linhas como uma lista

with open("notas.txt", "r", encoding="utf-8") as f:
linhas = f.readlines()
# cada linha inclui '\n' no final — use .strip() para remover
for linha in linhas:
print(linha.strip())

Iteração direta — linha por linha (mais eficiente para arquivos grandes)

with open("dados.txt", "r", encoding="utf-8") as f:
for linha in f:
print(linha.strip())
Encoding

Sempre use encoding="utf-8" ao abrir arquivos de texto para garantir que caracteres acentuados sejam lidos corretamente.


4. Escrevendo em Arquivos

.write() — escreve uma string no arquivo

with open("resultado.txt", "w", encoding="utf-8") as f:
f.write("Relatório de notas\n")
f.write("Ana: 8.5\n")
f.write("Bruno: 7.0\n")

Escrevendo múltiplas linhas com um loop

alunos = [
{"nome": "Ana", "media": 8.5},
{"nome": "Bruno", "media": 7.0},
{"nome": "Carol", "media": 9.2},
]

with open("turma.txt", "w", encoding="utf-8") as f:
f.write("Nome,Média,Situação\n")
for aluno in alunos:
situacao = "Aprovado" if aluno["media"] >= 6 else "Reprovado"
linha = f"{aluno['nome']},{aluno['media']:.1f},{situacao}\n"
f.write(linha)

Modo "a" — acrescentar sem apagar

with open("log.txt", "a", encoding="utf-8") as f:
f.write("Nova entrada de log\n")

5. Tratamento de Exceções com try/except

Uma exceção é um erro que ocorre durante a execução do programa. Sem tratamento, o programa encerra imediatamente e exibe uma mensagem de erro. Com try/except, você controla o que acontece nesses casos.

try:
numero = int(input("Digite um número: "))
resultado = 10 / numero
print(f"10 / {numero} = {resultado}")
except ValueError:
print("Erro: você não digitou um número válido.")
except ZeroDivisionError:
print("Erro: divisão por zero não é permitida.")

Estrutura completa

try:
# código que pode gerar exceção
...
except TipoDeErro:
# o que fazer se ocorrer esse erro específico
...
except (OutroErro, AindaOutroErro):
# múltiplos tipos em um mesmo bloco
...
else:
# executado apenas se NENHUMA exceção ocorreu
...
finally:
# executado SEMPRE — com ou sem exceção (útil para limpeza)
...

Exceções mais comuns

ExceçãoQuando ocorre
ValueErrorConversão inválida: int("abc")
ZeroDivisionErrorDivisão por zero: 10 / 0
FileNotFoundErrorArquivo não existe: open("x.txt", "r")
IndexErrorÍndice fora do range: lista[100]
KeyErrorChave inexistente em dicionário: dic["x"]
TypeErrorOperação em tipo errado: "a" + 5

Capturando qualquer exceção com Exception

try:
resultado = operacao_arriscada()
except Exception as e:
print(f"Ocorreu um erro: {e}")
Boas práticas

Prefira capturar exceções específicas em vez de usar Exception para tudo. Capturar qualquer erro pode esconder bugs que você deveria corrigir.


6. Combinando Tudo: Leitura, Processamento e Escrita

Exemplo completo: ler notas de um arquivo, calcular médias e gerar um relatório.

Suponha que o arquivo notas.csv contém:

Ana,8.0,9.5,7.0
Bruno,4.5,5.0,6.0
Carol,9.0,8.5,10.0
def calcular_media(notas):
return sum(notas) / len(notas)

resultados = []

try:
with open("notas.csv", "r", encoding="utf-8") as f:
for linha in f:
partes = linha.strip().split(",")
nome = partes[0]
notas = [float(n) for n in partes[1:]]
media = calcular_media(notas)
aprovado = media >= 6.0
resultados.append({
"nome": nome,
"media": media,
"aprovado": aprovado,
})
except FileNotFoundError:
print("Arquivo 'notas.csv' não encontrado.")
exit()

with open("relatorio.txt", "w", encoding="utf-8") as f:
f.write("=== Relatório Final ===\n\n")
for aluno in resultados:
situacao = "Aprovado" if aluno["aprovado"] else "Reprovado"
f.write(f"{aluno['nome']}: {aluno['media']:.1f}{situacao}\n")

print("Relatório gerado em 'relatorio.txt'.")

Exercícios / Checkpoints

Checkpoint 1: Entrada do usuário com validação

Escreva um programa que peça ao usuário para digitar uma temperatura em Celsius e converta para Fahrenheit (F = C × 1.8 + 32). Use try/except para tratar o caso em que o usuário digita algo que não é um número, exibindo uma mensagem amigável e pedindo que tente novamente.

Checkpoint 2: Leitura de arquivo

Crie manualmente um arquivo frutas.txt com o nome de uma fruta por linha. Escreva um programa que leia esse arquivo, armazene as frutas em uma lista, remova espaços com .strip(), ordene a lista alfabeticamente e imprima cada fruta numerada (1. Banana, 2. Laranja...).

Checkpoint 3: Escrita de arquivo

Escreva um programa que gere uma tabuada do número informado pelo usuário (de 1 a 10) e salve o resultado em um arquivo tabuada_N.txt (onde N é o número). Exemplo para N=7: o arquivo deve conter "7 × 1 = 7", "7 × 2 = 14", etc.

Checkpoint 4: Tratamento de exceções

Dado o trecho de código abaixo, identifique quais exceções podem ocorrer e adicione o tratamento adequado para cada uma:

chave = input("Digite a chave: ")
arquivo = open(chave + ".txt", "r")
conteudo = arquivo.read()
numero = int(conteudo)
resultado = 100 / numero
print(resultado)
arquivo.close()

Checkpoint 5: Projeto mini — cadastro em arquivo

Implemente um programa de cadastro de alunos que:

  1. Lê um arquivo alunos.csv (se existir) e carrega os dados em uma lista de dicionários
  2. Permite ao usuário adicionar um novo aluno (nome e nota, com validação)
  3. Exibe todos os alunos cadastrados com suas situações (aprovado/reprovado, média >= 6)
  4. Salva os dados atualizados de volta no arquivo alunos.csv

Resumo da Aula

Nesta aula, você aprendeu:

  • input() captura texto do usuário; use int() ou float() para converter ao tipo necessário
  • open() com o gerenciador with abre arquivos de forma segura; modos "r", "w" e "a" controlam o comportamento
  • .read(), .readlines() e iteração direta são as formas de ler um arquivo
  • .write() grava strings no arquivo; "\n" separa as linhas
  • try/except captura exceções e evita que erros interrompam o programa abruptamente

Referências

Leitura Essencial

Aprofundamento (Opcional)

  • Python Software Foundation. Built-in Exceptions. Disponível em: docs.python.org/3/library/exceptions.html
    • Lista completa de todas as exceções embutidas do Python com descrição de quando ocorrem.
  • Python Software Foundation. csv — CSV File Reading and Writing. Disponível em: docs.python.org/3/library/csv.html
    • Módulo padrão para leitura e escrita de arquivos CSV de forma mais robusta, substituindo o split(",") manual.