A palavra-chave assert
é uma ferramenta de programação que serve para verificar se uma condição é verdadeira em um determinado ponto do seu código. Se a condição for falsa, o assert
imediatamente levanta uma exceção AssertionError
, parando a execução do programa e mostrando uma mensagem.
Para que serve o assert
?
assert
é usado para condições que, se seu código estiver correto, nunca deveriam ser falsas. Se um assert
falha, isso geralmente significa que há um bug na sua própria lógica de programação em algum lugar, não um erro de entrada do usuário ou do ambiente.
assert num >= 0
para confirmar isso. Se, por algum erro em outro lugar, um número negativo chegar, o assert
vai disparar, alertando você sobre o bug.assert
é um "alerta precoce" para o desenvolvedor. Ele ajuda a encontrar problemas logo que acontecem, em vez de deixar que o erro se propague e cause problemas mais difíceis de rastrear depois.assert
é a espinha dorsal de muitos frameworks de teste unitário. Você usa assert
para verificar se o resultado de uma função é o esperado, se uma condição é verdadeira, etc. (ex: "assert que a função retorna 5", "assert que a lista não está vazia").Sintaxe:
assert condicao, "Mensagem de erro (opcional)"
condicao
: Uma expressão que deve ser avaliada como True
ou False
."Mensagem de erro"
: Uma string opcional que será exibida se a condicao
for falsa.Quando USAR assert
(Melhores Práticas):
Quando NÃO USAR assert
(CUIDADO!):
try-except
.
O
(otimização), que desativa todos os assert
s. Se você usar assert
para validações críticas, seu programa pode falhar de forma inesperada em produção.Exemplos Práticos:
def calcular_area_retangulo(largura, altura):
# Pré-condição: Largura e altura devem ser números positivos.
# Se isso não for verdade, é um erro de quem chamou a função ou um bug.
assert isinstance(largura, (int, float)) and largura > 0, "Largura deve ser um número positivo."
assert isinstance(altura, (int, float)) and altura > 0, "Altura deve ser um número positivo."
area = largura * altura
# Pós-condição: A área deve ser positiva.
assert area > 0, "Erro interno: Área calculada não é positiva. Verifique a lógica."
return area
print("--- Testes de calcular_area_retangulo ---")
try:
# Cenário 1: Entrada válida (sucesso)
area1 = calcular_area_retangulo(5, 10)
print(f"Área do retângulo (5x10): {area1}") # Saída: Área do retângulo (5x10): 50
# Cenário 2: Erro de tipo (TypeError no assert)
area2 = calcular_area_retangulo(5, "dez")
print(f"Área do retângulo (5x'dez'): {area2}")
except AssertionError as e:
print(f"Erro capturado (TypeError): {e}") # Saída: Erro capturado (TypeError): Altura deve ser um número positivo.
try:
# Cenário 3: Valor inválido (ValueError no assert)
area3 = calcular_area_retangulo(5, -2)
print(f"Área do retângulo (5x-2): {area3}")
except AssertionError as e:
print(f"Erro capturado (ValueError): {e}") # Saída: Erro capturado (ValueError): Altura deve ser um número positivo.