En Python, l’instruction 𝐚𝐬𝐬𝐞𝐫𝐭 vous permet d’implémenter des assertions à des fins de débogage. Lorsque l’expression spécifiée est réalisée à false, le programme génère une A𝐬𝐬𝐞𝐫𝐭𝐢𝐨𝐧E𝐫𝐫𝐨𝐫 et s’arrête.
Utilisation de base de l’instruction 𝐚𝐬𝐬𝐞𝐫𝐭
Vous pouvez préciser l’expression que vous souhaitez vérifier après 𝐚𝐬𝐬𝐞𝐫𝐭 .
assert expression
Si l’expression est vraie, le programme continue. Mais si elle est fausse, une erreur A𝐬𝐬𝐞𝐫𝐭𝐢𝐨𝐧E𝐫𝐫𝐨𝐫 est générée et le programme s’arrête.
a = 100 assert a == 100 # assert a == 0 # AssertionError:
Similaires aux instructions 𝐢𝐟 , les valeurs autres que T𝐫𝐮𝐞 et F𝐚𝐥𝐬𝐞 peuvent également être toujours comme des valeurs booléennes. Par exemple, la valeur numérique 0 ou une liste vide est considérée comme fausse.
assert [0, 1, 2] # assert [] # AssertionError:
Vous pouvez combiner plusieurs conditions avec 𝐚𝐧𝐝 ou 𝐨𝐫 et les nier avec 𝐧𝐨𝐭 . Plus de détails sur la spécification de plusieurs conditions seront abordés plus tard.
a = 100 assert a > 0 and a % 2 == 0 # assert a < 0 and a % 2 == 0 # AssertionError:
Afficher les messages avec 𝐚𝐬𝐬𝐞𝐫𝐭
Vous pouvez passer une deuxième expression à 𝐚𝐬𝐬𝐞𝐫𝐭 , séparée par une virgule.
assert expression1, expression2
Dans ce cas, 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧2 sert d’argument à . Autrement dit, A𝐬𝐬𝐞𝐫𝐭𝐢𝐨𝐧E𝐫𝐫𝐨 𝐫(𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧2) est levé lorsque 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧1 est faux.
En utilisant une chaîne pour 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧2 , vous pouvez afficher un message d’erreur lorsque 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧1 est faux.
a = 100 # assert a == 0, 'a must be 0.' # AssertionError: a must be 0.
Définissez plusieurs conditions avec 𝐚𝐬𝐬𝐞𝐫𝐭
Comme mentionné ci-dessus, 𝐚𝐧𝐝 peut être utilisé pour définir plusieurs conditions. Cependant, en raison de l’évaluation en court-circuit, le côté droit de 𝐚𝐧𝐝 n’est pas évalué si le côté gauche est faux.
def test1(x): print('test1 is called.') return x > 0 def test2(x): print('test2 is called.') return x % 2 == 0 a = -100 # assert test1(a) and test2(a), 'Error Message' # test1 is called. # AssertionError: Error Message
Si vous utilisez des instructions 𝐚𝐬𝐬𝐞𝐫𝐭 séquentielles et que la première condition est fausse, le programme génère immédiatement une erreur A𝐬𝐬𝐞𝐫𝐭𝐢𝐨𝐧E𝐫𝐫𝐨𝐫 et arrête l’exécution.
# assert test1(a), 'Error Message1' # assert test2(a), 'Error Message2' # test1 is called. # AssertionError: Error Message1
Pour garantir que plusieurs conditions sont toujours réalisées quel que soit le résultat, vous pouvez écrire comme suit.
# assert (test1(a), test2(a)) == (True, True), 'Error Message' # test1 is called. # test2 is called. # AssertionError: Error Message
Désactiver 𝐚𝐬𝐬𝐞𝐫𝐭 avec l’option -O ou -OO
Selon la documentation officielle, 𝐚𝐬𝐬𝐞𝐫𝐭 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧 et 1, 𝐞𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐨𝐧2 correspondant aux codes suivants :
if __debug__: if not expression: raise AssertionError
if __debug__: if not expression1: raise AssertionError(expression2)
__𝐝𝐞𝐛𝐮𝐠__ est une constante intégrée qui est définie sur F𝐚𝐥𝐬𝐞 lorsque Python est exécuté avec les options -O ou -OO pour les optimisations, et T𝐫𝐮𝐞 sinon.
Par conséquent, si vous exécutez Python comme 𝐩𝐲𝐭𝐡𝐨𝐧 -O 𝐱𝐱𝐱.𝐩𝐲 , __𝐝𝐞𝐛𝐮𝐠__ devient F𝐚𝐥𝐬𝐞 , et aucune vérification 𝐚𝐬𝐬𝐞𝐫𝐭 ne sera effectué.
L’instruction 𝐚𝐬𝐬𝐞𝐫𝐭 est uniquement destinée au débogage. Si vous devez vérifier les conditions pendant une opération réelle, utilisez la gestion des exceptions.
