Capture des erreurs de syntaxe de eval()
Considérez les extraits de code suivants :
<code class="python">try: a+a=a except SyntaxError: print("first exception caught")</code>
<code class="python">try: eval("a+a=a") except SyntaxError: print("second exception caught")</code>
Dans dans le deuxième cas, l'instruction "second exception..." est imprimée (exception interceptée), alors que dans le premier elle ne l'est pas. Les deux erreurs de syntaxe générées ("SyntaxError1" et "SyntaxError2") sont-elles différentes ? Existe-t-il un moyen d'attraper "SyntaxError1" (supprimant ainsi les erreurs de compilation) ?
Réponse
La différence entre "SyntaxError1" et "SyntaxError2" réside dans le moment de leur apparition. "SyntaxError1" est déclenché par le compilateur avant même la création du bloc try/sauf, tandis que "SyntaxError2" est déclenché lorsque le compilateur s'exécute dans le cadre de eval(), après la configuration du bloc try/sauf.
Pour détecter les erreurs de syntaxe, notamment « SyntaxError1 », le compilateur doit s'exécuter deux fois. eval() est une méthode pour y parvenir. D'autres options incluent :
En forçant le compilateur à s'exécuter deux fois, il devient possible de détecter les erreurs de syntaxe et de les gérer via des blocs try/sauf.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!