🎯 Asserções em Python
Em poucas palavras
Definição técnica ou simplificada do conceito.
📝 Notas e Desenvolvimento
🔗 Conexões e Contexto
- Atlas: MdC - Programação, MdC - Tecnologia
- Notas Relacionadas:
📚 Referências e Fontes
Links Externos
Citações Diretas
📂 Outros Conteúdos Preservados
Como Funcionam
A sintaxe básica de uma asserção é:
assert condicao, "Mensagem de erro (opcional)"- Se a
condicaofor avaliada comoTrue, a execução do programa continua normalmente. - Se a
condicaofor avaliada comoFalse, uma exceçãoAssertionErroré levantada. - A
mensagem de erroé opcional e será exibida como parte daAssertionErrorse a asserção falhar, fornecendo mais contexto sobre o problema.
Exemplo Simples:
assert 1 + 1 == 2
print("1 + 1 é igual a 2. Asserção bem-sucedida.")
### Com mensagem de erro
assert 1 + 1 == 3, "Erro: 1 + 1 deveria ser igual a 2, mas não foi!"
print("Esta linha não será executada se a asserção acima falhar.")Se você executar o código acima, a segunda asserção falhará e você verá uma saída como:
1 + 1 é igual a 2. Asserção bem-sucedida.
Traceback (most recent call last):
File "<stdin>", line 5, in <module>
AssertionError: Erro: 1 + 1 deveria ser igual a 2, mas não foi!
Quando Usar Asserções
As asserções são ideais para:
-
Verificar Pré-condições: Garantir que os argumentos passados para uma função ou método atendam aos requisitos antes que a lógica principal seja executada.
def dividir(a, b): assert b != 0, "O divisor não pode ser zero!" return a / b print(dividir(10, 2)) # Saída: 5.0 # dividir(10, 0) # Levantaria AssertionError -
Verificar Pós-condições: Confirmar que o resultado de uma operação ou função está dentro das expectativas.
def smallest_item(xs): # Assumimos que xs não é vazio para simplificar, mas uma asserção poderia verificar isso. assert isinstance(xs, list) and len(xs) > 0, "A entrada deve ser uma lista não vazia." resultado = min(xs) assert resultado in xs, "O menor item deve estar na lista original." return resultado assert smallest_item([10, 20, 5, 40]) == 5 assert smallest_item([1, 0, -1, 2]) == -1 -
Verificar Invariantes: Assegurar que certas condições permaneçam verdadeiras em pontos críticos do código, como dentro de loops ou após modificações de estado.
-
Detecção de Erros de Programação: Identificar situações que nunca deveriam acontecer se o código estiver correto. Se uma asserção falha, isso indica um bug no próprio código.
Quando NÃO Usar Asserções
É crucial entender que as asserções não são para:
- Validação de Entrada do Usuário: Para entradas externas (de usuários, arquivos, rede), use blocos
if/elsee exceções comoValueError,TypeError, etc. Asserções podem ser desativadas em produção, o que deixaria seu programa vulnerável a entradas inválidas. - Tratamento de Erros Esperados: Eventos como falhas de rede, arquivos não encontrados ou permissões negadas são condições que podem ocorrer em um ambiente de produção e devem ser tratadas com blocos
try-except. - Substituir Testes Unitários: Asserções são para verificações internas do código durante o desenvolvimento. Testes unitários são para verificações externas da funcionalidade e comportamento do sistema.
Desativando Asserções
As asserções podem ser desativadas em tempo de execução usando a opção -O (de “optimize”) ao iniciar o interpretador Python:
python -O seu_script.pyQuando as asserções são desativadas, as declarações assert são ignoradas, e o código dentro delas não é executado. Isso significa que qualquer lógica crítica ou efeitos colaterais que você possa ter colocado em uma asserção (o que é uma má prática) não ocorrerão. Por isso, as asserções devem ser usadas apenas para verificar condições que, se falsas, indicam um bug no programa.
:: Referência :: Python assert keyword (w3schools.com)