Asserções da Gramática Avançada do Python

Asserções da Gramática Avançada do Python

Na programação Python, as asserções são uma ferramenta útil para examinar o estado de um programa, o que pode ajudá-lo a encontrar erros em seu programa. Asserções são pontos de verificação colocados no código para garantir que certas condições do programa sejam verdadeiras, caso contrário, o programa gerará um erro. Neste artigo, discutiremos asserções em Python em detalhes com vários exemplos.
insira a descrição da imagem aqui

Uso básico de asserções

Em Python, assertdeclarações são palavras-chave usadas para implementar asserções. Sua sintaxe básica é a seguinte:

assert condition

Se conditiontrue, o programa continua a execução; se conditionfalse, o programa gera um AssertionError.

Por exemplo, podemos usar asserta instrução para verificar os parâmetros de entrada de uma função:

def add_positive_numbers(x, y):
    assert x > 0 and y > 0, "Both numbers must be positive"
    return x + y

No código acima, se for xou ynão um número positivo, a assertinstrução gerará um AssertionErrorcom a mensagem de erro "Ambos os números devem ser positivos".

1. Expressões booleanas em declarações assertivas

A instrução assert <condition>pode ser qualquer expressão booleana, incluindo expressões lógicas complexas e chamadas de função. Por exemplo:

a = 10
b = 20

# 判断a是否大于b的一半
assert a > b/2, "a不大于b的一半"

# 判断两个字符串是否相等
assert len("hello") == len("world"), "两个字符串长度不相等"

2. Objetos que podem ser chamados em instruções assert

A instrução assert <condition>também pode ser um objeto que pode ser chamado, como uma função ou método. Nesse caso, a asserção verifica se o valor de retorno do callable é verdadeiro. Por exemplo:

def is_even(num):
    return num % 2 == 0

# 判断一个数是否为偶数
assert is_even(10), "这不是一个偶数"
assert not is_even(11), "这不是一个奇数"

No código acima, definimos uma função is_even(num)para verificar se um número é par ou não. Na assertiva, chamamos a função e verificamos os casos pares e ímpares separadamente.

3. Objetos iteráveis ​​na instrução assert

A instrução assert <condition>também pode ser um objeto iterável, como uma lista, tupla ou dicionário. Nesse caso, a asserção verifica se o iterável está vazio ou não. Por exemplo:

my_list = [1, 2, 3]

# 判断列表不为空
assert my_list, "列表不能为空"

# 删除列表中的所有元素
my_list.clear()

# 判断列表为空
assert not my_list, "列表必须为空"

No código acima, usamos a lista my_listcomo condição de asserção para verificar se a lista não está vazia e se a lista está vazia.

Uso Avançado de Asserções

As asserções podem ser usadas não apenas para verificar os parâmetros de entrada de uma função, mas também para verificar a saída de uma função ou qualquer outro estado do programa. Em programas complexos, as asserções podem ajudá-lo a garantir a exatidão do seu código, especialmente quando algumas partes do código que você está escrevendo podem ser afetadas por outras partes.

Por exemplo, podemos usar asserções para verificar o resultado de uma função de classificação de lista:

def test_sort_function(sort_function):
    list = [5, 2, 9, 1]
    sorted_list = sort_function(list)
    assert sorted_list == [1, 2, 5, 9], "The sort function did not return a correctly sorted list"

No código acima, asserta instrução gera um se o resultado da função de classificação não for a lista classificada esperada AssertionError.

Asserções vs Tratamento de Exceções

Embora as asserções e o tratamento de exceções possam ser usados ​​para detectar e tratar erros em programas, eles não são usados ​​exatamente nos mesmos cenários. Em Python, as asserções são frequentemente usadas nas fases de desenvolvimento e depuração para detectar bugs em um estágio inicial. As asserções devem ser removidas ou desativadas assim que o programa for desenvolvido e testado adequadamente.

Por outro lado, o tratamento de exceções geralmente é usado para lidar com erros esperados que podem ocorrer durante a execução do programa, como erros de arquivo não encontrado ou erros de conexão de rede. Esses erros geralmente não são causados ​​por erros de programação, mas pelo ambiente operacional do programa ou pela entrada do usuário.

Notas sobre Asserções

Ao usar asserções, há alguns pontos a serem observados:

  1. Não confie demais em asserções para lidar com todos os erros que possam surgir em seu programa. As asserções destinam-se principalmente à detecção de erros durante o desenvolvimento e a depuração e não devem ser usadas

  2. Lidar com erros de tempo de execução. Em Python, o tratamento de exceções deve ser usado para possíveis erros de tempo de execução, como erros de manipulação de arquivos, erros de rede, etc.

    1. Não use expressões em asserções que possam alterar o estado do programa. Como o Python possui uma opção de linha de comando -O(modo de otimização), neste modo as asserções serão desabilitadas globalmente, ou seja, todas as asserções serão ignoradas e executadas. Portanto, se você usar uma expressão em uma instrução assert que altera o estado do programa, essas alterações de estado não ocorrerão no modo otimizado, possivelmente resultando em um comportamento inconsistente do programa.
    # 错误的做法
    assert list.pop(0) == 0, "The first element is not zero"
    

    No código acima, list.pop(0) será executado independentemente de list.pop(0) == 0 ser verdadeiro, e isso mudará o conteúdo da lista. Se estiver executando em modo otimizado, esta expressão não será executada, portanto o conteúdo da lista não será alterado.

    1. As mensagens de erro de assertividade devem ser tão claras e específicas quanto possível. Quando a asserção falha, se você puder determinar rapidamente a causa do erro por meio da mensagem de erro, isso melhorará muito a eficiência da depuração.

exemplo

  1. 检查变量是否为 None
x = None
assert x is not None, 'x must be defined'

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-wMoBFkFF-1686875657585)(image-20230615143535937.png)]

  2. 确保列表不为空
mylist = [1, 2, 3]
assert mylist, 'The list should not be empty!'

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-744jML2X-1686875657591)(image-20230615143610641.png)]

  3. 检查字典中是否存在指定键
mydict = {
    
    'a': 1, 'b': 2}
assert 'c' in mydict, 'Key "c" not found in dictionary'

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-f8Qpw9EU-1686875657595)(image-20230615143651794.png)]

  4. 确保函数返回值符合要求
def add(a, b):
 return a + b

assert add(2, 3) == 5, 'add() function is not working correctly'

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-QZHh1jvt-1686875657596)(image-20230615143711144.png)]

  5. 检查异常是否被正确抛出
def divide(a, b):
 assert b != 0, 'Cannot divide by zero!'
 return a / b

try:
 divide(3, 0)
except AssertionError as error:
 print(error)

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-zG94ueq9-1686875657599)(image-20230615143730643.png)]

Estes são exemplos de usos comuns de asserções, mas não todos. Usando asserções, problemas podem ser encontrados a tempo durante a fase de desenvolvimento e a correção e estabilidade do código podem ser garantidas.

Resumir

Este artigo apresenta o uso básico e avançado de asserções em Python, bem como as precauções. Usando asserções, problemas podem ser encontrados a tempo durante a fase de desenvolvimento e a correção e estabilidade do código podem ser garantidas. Deve-se observar que é melhor desligar as asserções em um ambiente de produção, pois isso afetará o desempenho do programa. Ao mesmo tempo, não use expressões que possam alterar o estado do programa na asserção, e a mensagem de erro da asserção deve ser a mais clara e específica possível.

Resumindo, a asserção é um recurso importante do Python, que pode nos ajudar a encontrar erros rapidamente durante o desenvolvimento e a depuração. Compreender e dominar o uso de asserções nos permite escrever e depurar programas Python de forma mais eficaz.

Acho que você gosta

Origin blog.csdn.net/qq_42076902/article/details/131239372
Recomendado
Clasificación