Quelle est l'utilisation de "assert" en Python?


Answers

Attention aux parenthèses. Comme cela a été souligné plus haut, dans Python 3, assert est toujours une déclaration , donc par analogie avec print(..) , on peut extrapoler la même chose pour assert(..) ou raise(..) mais vous ne devriez pas.

C'est important parce que:

assert(2 + 2 == 5, "Houston we've got a problem")

ne fonctionnera pas, contrairement à

assert 2 + 2 == 5, "Houston we've got a problem"

La raison pour laquelle le premier ne fonctionnera pas est que bool( (False, "Houston we've got a problem") ) évalue à True .

Dans l'instruction assert(False) , il ne s'agit que de parenthèses redondantes autour de False , qui évaluent leur contenu. Mais avec assert(False,) les parenthèses sont maintenant un tuple, et un tuple non vide est évalué à True dans un contexte booléen.

Question

J'ai lu un certain code source et dans plusieurs endroits j'ai vu l'usage de l' assert .

Qu'est-ce que cela signifie exactement? Quel est son usage?




L'affirmation assert a deux formes.

Le formulaire simple, assert <expression> , est équivalent à

if __​debug__:
    if not <expression>: raise AssertionError

La forme étendue, assert <expression1>, <expression2> , est équivalente à

if __​debug__:
    if not <expression1>: raise AssertionError, <expression2>



D'autres vous ont déjà donné des liens vers la documentation.

Vous pouvez essayer ce qui suit dans un shell interactif:

>>> assert 5 > 2
>>> assert 2 > 5
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
builtins.AssertionError:

La première déclaration ne fait rien, tandis que la seconde soulève une exception. C'est le premier indice: les assertions sont utiles pour vérifier les conditions qui devraient être vraies dans une position donnée de votre code (généralement, le début (conditions préalables) et la fin d'une fonction (postconditions)).

Les assertions sont en fait fortement liées à la programmation par contrat, ce qui est une pratique d'ingénierie très utile:

http://en.wikipedia.org/wiki/Design_by_contract .







>>>this_is_very_complex_function_result = 9
>>>c = this_is_very_complex_function_result
>>>test_us = (c < 4)

>>> #first we try without assert
>>>if test_us == True:
    print("YES! I am right!")
else:
    print("I am Wrong, but the program still RUNS!")

I am Wrong, but the program still RUNS!


>>> #now we try with assert
>>> assert test_us
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    assert test_us
AssertionError
>>> 



Raccourcis à grok 'affirmer'.

assert effectue comme un point de contrôle,

Si cela fonctionne bien, continuez;

sinon, déclenchez une alerte.




def getUser(self, id, Email):

    user_key = id and id or Email

    assert user_key

Peut être utilisé pour s'assurer que les paramètres sont passés dans l'appel de fonction.




si la déclaration après assert est vraie alors le programme continue, mais si l'instruction après assert est fausse alors le programme donne une erreur. Aussi simple que cela.

par exemple:

assert 1>0   #normal execution
assert 0>1   #Traceback (most recent call last):
             #File "<pyshell#11>", line 1, in <module>
             #assert 0>1
             #AssertionError