Ficheiros, exceções e testes
Módulos, persistência em texto, CSV, tratamento de falhas, asserções e depuração.
Módulos
import mathpermitemath.sqrt;from math import sqrtintroduzsqrtno âmbito atual.- Instruções no nível do módulo executam ao importar. Guarda a interface de entrada/saída em
if __name__ == "__main__":para correr apenas na execução direta.
Ficheiros de texto e CSV
open(caminho, modo, encoding="utf-8")abre texto. Caminhos relativos partem da pasta de trabalho do processo.
| Modo | Efeito |
|---|---|
"r" | Lê; falha se faltar |
"w" | Cria ou substitui todo o conteúdo |
"a" | Acrescenta no fim; cria se faltar |
"x" | Cria; falha se já existir |
withfecha o recurso mesmo quando há uma exceção.read()lê tudo;for linha in ficheiropercorre linhas.readline()devolve""no fim do ficheiro; uma linha em branco pode ser"\n". Não são o mesmo caso.writerecebe texto, não acrescenta uma mudança de linha e devolve o número de caracteres escritos.- Para CSV, usa
csv.reader,DictReaderouwriter, comnewline="". Campos podem conter vírgulas e aspas;split(",")não chega. Os campos lidos são strings; converte os números.
with open("notas.txt", "w", encoding="utf-8") as ficheiro:
ficheiro.write("12\n16\n")
with open("notas.txt", "r", encoding="utf-8") as ficheiro:
notas = [int(linha.strip()) for linha in ficheiro]
print(notas)
print(sum(notas) / len(notas))Executa o código para ver a saída e os gráficos.
A saída é [12, 16] e 14.0.
- Este formato exige linhas com inteiros e uma lista não vazia para a média.
- No editor, o ficheiro dura só esta execução; num programa local fica no disco.
Exceções
| Bloco | Quando executa |
|---|---|
try | Tenta a operação |
except Tipo | Trata uma exceção compatível do corpo de try |
else | Só quando try termina normalmente, sem exceção nem return, break ou continue |
finally | Ao sair, mesmo com exceção ou retorno |
-
Uma falha em
elsenão volta aoexceptassociado. -
Trata o erro esperado, como
ValueErrornuma conversão, sem esconder falhas diferentes. -
raisecomunica uma violação do contrato. -
Decide se uma falha pede novos dados, ignora uma linha ou termina, em vez de inventar um resultado válido.
-
FileNotFoundErroré também umOSError. Python escolhe o primeiro tratador compatível: põe o mais específico antes do geral. -
Sem tratador compatível, a exceção propaga-se ao chamador; não retoma a instrução seguinte à falha dentro do mesmo
try.
Asserções e testes
assertverifica uma hipótese interna, mas pode ser desativado com otimizações. Valida entradas explicitamente.- Calcula expectativas independentemente. Inclui um caso normal, fronteiras e entradas inválidas previstas; testes finitos não demonstram correção geral.
- Para aproximações numéricas, usa uma tolerância adequada, por exemplo com
math.isclose. Para depurar, reproduz a menor entrada útil e encontra o primeiro estado diferente do esperado.