Laboratório — Dados persistentes e depuração

Laboratório guiado com execução, observação, testes e solução completa: Laboratório — Dados persistentes e depuração.

Laboratório — Dados persistentes e depuração

Por que este laboratório existe

Você transformará um catálogo em programa persistente: carregar JSON, tratar ausência/erro, alterar dados, salvar e investigar falhas.

Objetivo

Integrar exceções, depuração, arquivos, JSON, módulos e organização.

Importante: não tente terminar rápido. O objetivo é observar o que acontece em cada etapa. Se algo falhar, registre a entrada, a mensagem e a correção.

Preparação

  • Crie pasta ft002-m08-lab com app.py, core.py e dados.json.
  • Use UTF-8.
  • Faça uma cópia do JSON antes de corrompê-lo propositalmente.

Código inicial

# app.py
import json
from pathlib import Path

ARQUIVO = Path("dados.json")

Procedimento passo a passo

  1. Em core.py, crie funções para adicionar registro e calcular quantidade.
  2. Em app.py, crie função carregar() que retorne lista vazia se o arquivo não existir.
  3. Crie função salvar(dados) usando json.dump.
  4. Execute, adicione um registro e confirme que ele permanece após fechar e abrir novamente.
  5. Corrompa propositalmente uma cópia do JSON e observe JSONDecodeError.
  6. Adicione tratamento específico que informe que o arquivo está inválido sem apagar silenciosamente os dados.
  7. Use main() e if __name__ == "__main__".

Uma solução completa para comparar depois da tentativa

Tente primeiro sem consultar esta seção. Depois compare a sua versão com a solução e identifique diferenças de raciocínio, não apenas diferenças de nomes.

import json
from pathlib import Path

ARQUIVO = Path("dados.json")


def carregar():
    if not ARQUIVO.exists():
        return []
    try:
        with ARQUIVO.open("r", encoding="utf-8") as arquivo:
            return json.load(arquivo)
    except json.JSONDecodeError:
        print("O arquivo JSON existe, mas está inválido. Corrija ou restaure o backup.")
        return None


def salvar(dados):
    with ARQUIVO.open("w", encoding="utf-8") as arquivo:
        json.dump(dados, arquivo, ensure_ascii=False, indent=2)


def main():
    dados = carregar()
    if dados is None:
        return
    dados.append({"titulo": "Revisar FT-002", "concluida": False})
    salvar(dados)
    print("Registros salvos:", len(dados))


if __name__ == "__main__":
    main()

Resultado esperado

O programa deve preservar dados entre execuções e tratar arquivo ausente de forma diferente de arquivo JSON corrompido.

Checklist de validação

  • Consigo executar o programa do início ao fim.
  • Consigo explicar o papel de cada variável, condição, laço ou função que usei.
  • Testei pelo menos um caso normal, um caso de fronteira e um caso problemático quando aplicável.
  • Li e entendi qualquer mensagem de erro encontrada, em vez de apenas apagar a linha.
  • Meu código usa nomes que descrevem os dados e mantém entrada, regra e saída compreensíveis.

Desafio extra

Separe funções de persistência em storage.py e mantenha regras em core.py.

Critério de conclusão

Considere o laboratório concluído apenas quando você conseguir recriar a parte principal sem copiar e explicar por que cada etapa existe. “Funcionou uma vez” não é o mesmo que “eu entendi”.

Avaliação opcional

Avaliação com validação humana

Receba nota e feedback individual sobre esta atividade. Este serviço é opcional e não é necessário para concluir o curso ou receber o certificado gratuito.

Entrar para solicitar