02 Tudo solto no corpo do arquivo
o que roda no import
A primeira versão do arquivo, salva antes da revisão. Repare que não existe nenhuma função: tudo está no corpo, colado na margem esquerda.
import os
import psycopg2
from neon_config import carregar_env
# Garante o carregamento do .env
carregar_env()
print("Iniciando o Núcleo de Segurança Neon...")
conexao = None
try:
host = os.environ.get("NEON_DB_HOST", "127.0.0.1")
Em Python, importar um arquivo é executar o arquivo. Não existe "só carregar as funções": o interpretador lê de cima a baixo e faz o que estiver escrito.
Então no dia em que outro arquivo do projeto escrevesse:
import neon_core
...ele levaria junto, sem pedir e sem avisar: o .env lido,
uma frase impressa na tela e uma conexão aberta com o banco de dados.
Um teste automatizado que importasse o módulo abriria conexão. Um script
de build, idem. E o dia em que o banco estivesse fora do ar, o
import quebraria — um import, não uma chamada.
A regra: código no corpo do arquivo roda no import. Código dentro de função roda quando alguém chama. A diferença só aparece no dia do acidente, e aí já é tarde.
Tudo que faz alguma coisa entrou numa função com nome e com docstring dizendo o que ela devolve:
def testar_conexao() -> bool:
"""Abre, valida e fecha uma conexão. True se o banco respondeu."""
try:
import psycopg2
except ImportError:
print("[ BLOQUEIO ] psycopg2 não instalado. Rode: pip install -r requirements.txt")
return False
Repare que até o import psycopg2 desceu para dentro da
função. Assim quem só quer ler uma constante do módulo não precisa ter a
biblioteca do Postgres instalada.
E a fechadura fica fechada de verdade, com o finally:
finally:
if conexao is not None:
conexao.close()
print("[ INFO ] Conexão encerrada com segurança.")
Por fim, as duas linhas no fim do arquivo que separam rodar de importar — as mais importantes da aula:
if __name__ == "__main__":
print("Iniciando o Núcleo de Segurança Neon...")
sys.exit(0 if testar_conexao() else 1)
__name__ vale "__main__" quando você
chamou o arquivo pelo terminal, e vale o nome do módulo quando alguém
importou. Uma linha, e o arquivo passa a saber a diferença.
A saída do arquivo antigo, com tudo solto — ele tenta conectar assim que é lido, e falha em público:
$ python3 neon_core.py
Iniciando o Núcleo de Segurança Neon...
[ BLOQUEIO ] Falha na invasão autorizada: connection to server at "127.0.0.1",
port 5432 failed: fe_sendauth: no password supplied
E o antes e o depois lado a lado, feito pelo próprio Git:
diff -u original_ia/neon_core.py neon_core.py
Guardar a primeira geração do código numa pasta original_ia/
antes de revisar é o que torna esta aula possível. O erro tem endereço.
antes · original_ia/neon_core.py linhas 1–13 → agora · neon_core.py — a saída é da captura de 4 de setembro de 2026, 10:08