Aula 13: Entrada/Saída e Tratamento de Exceções
Objetivos de Aprendizagem
Ao final desta aula, você será capaz de:
- Capturar entrada do usuário com
input()e converter para o tipo correto - Abrir, ler e escrever arquivos de texto usando
open()e o gerenciadorwith - Identificar os modos de abertura de arquivo:
r,w,a - Usar
try/exceptpara tratar exceções e evitar que erros encerrem o programa - 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: "))
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:
| Modo | Significado | Arquivo existe | Arquivo não existe |
|---|---|---|---|
"r" | Leitura | Abre normalmente | FileNotFoundError |
"w" | Escrita | Apaga e recria | Cria novo arquivo |
"a" | Acrescentar (append) | Mantém conteúdo, escreve no final | Cria novo arquivo |
"r+" | Leitura e escrita | Abre normalmente | FileNotFoundError |
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
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())
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ção | Quando ocorre |
|---|---|
ValueError | Conversão inválida: int("abc") |
ZeroDivisionError | Divisão por zero: 10 / 0 |
FileNotFoundError | Arquivo não existe: open("x.txt", "r") |
IndexError | Índice fora do range: lista[100] |
KeyError | Chave inexistente em dicionário: dic["x"] |
TypeError | Operaçã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}")
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:
- Lê um arquivo
alunos.csv(se existir) e carrega os dados em uma lista de dicionários - Permite ao usuário adicionar um novo aluno (nome e nota, com validação)
- Exibe todos os alunos cadastrados com suas situações (aprovado/reprovado, média >= 6)
- Salva os dados atualizados de volta no arquivo
alunos.csv
Resumo da Aula
Nesta aula, você aprendeu:
input()captura texto do usuário; useint()oufloat()para converter ao tipo necessárioopen()com o gerenciadorwithabre 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 linhastry/exceptcaptura exceções e evita que erros interrompam o programa abruptamente
Referências
Leitura Essencial
- Python Software Foundation. Reading and Writing Files. Disponível em: docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files
- Tutorial oficial sobre entrada/saída de arquivos em Python.
- Python Software Foundation. Errors and Exceptions. Disponível em: docs.python.org/3/tutorial/errors.html
- Tutorial oficial sobre exceções, tratamento de erros e a hierarquia de exceções do Python.
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.
- Módulo padrão para leitura e escrita de arquivos CSV de forma mais robusta, substituindo o