1
votes

À quoi sert la fonction intégrée SyntaxError en python?

Quel est l'intérêt de la SyntaxError intégrée en python? Cela ne semble pas avoir d'utilité pratique car les SyntaxError sont trouvés par l'interpréteur python avant l'exécution du code. Exemple:

try:
    raise SyntaxError
except: pass

Cela échoue avec une SyntaxError car la SyntaxError est trouvée avant de pouvoir être traitée. Maintenant, cela fonctionne et échoue silencieusement, comme prévu:

try:
    &@!5_+ #SyntaxError
except: pass

Cependant, je n'ai jamais vu de fonction ou classe ou n'importe quoi déclenche une SyntaxError . Alors pourquoi cela existe-t-il si facile à utiliser et à attraper alors que la seule utilisation semble être de le soulever inutilement? Y a-t-il un endroit où python lève une SyntaxError où il peut être intercepté? Ou est-ce que ça sort juste dans la portée intégrée juste pour y être?


1 commentaires

Il peut être utilisé pour gérer des éléments analysés à l'aide de ast.literal_eval par exemple.


3 Réponses :


3
votes

Je pense que la documentation est explicite:

Déclenché lorsque l'analyseur rencontre une erreur de syntaxe. Cela peut se produire dans une instruction d'importation, dans un appel aux fonctions intégrées exec () ou eval () , ou lors de la lecture du script initial ou de l'entrée standard (également interactivement).


4 commentaires

Donc import ... , __import __ (...) , exec (...) et eval (...) ? Est-ce que c'est ça?


@EthanK, vous pouvez également rencontrer des erreurs d'encodage telles que SyntaxError: caractère non ASCII ...


Mais pouvez-vous les attraper?


@EthanK je crois que vous pouvez attraper n'importe quelle exception si c'est le produit d'une opération / d'un calcul / d'un processus.



1
votes

Le moyen le plus simple d'attaquer cette question est de rechercher comment cette exception est levée en pratique. J'ai déjà téléchargé le code source de CPython, donc j'ai fait

find . -type f -name "*.py" | xargs grep "raise SyntaxError"

Nous voyons qu'il existe un script utilitaire qui effectue des conversions de fichiers qui génère une erreur de syntaxe si ce n'est pas le cas ne vois pas l'octet magique au bon endroit. De plus, la bibliothèque xml les utilise pour analyser les expressions XPath.

Cela suggère qu'elle est destinée à être utilisée par le code utilisateur qui traite également d'autres choses. Une recherche Google sur "rise SyntaxError" montre que de nombreux résultats sont utilisés de cette manière.

Je ne suis pas très familier avec les composants internes de Python, mais je suppose être capable de gérer une erreur lors de l'analyse du code source de la même manière qu'ils gèrent les autres erreurs, les choses sont plus agréables. De plus, eval etc. doit soulever quelque chose, comme la documentation et l'état de réponse précédent.


1 commentaires

Belle réponse technique! Merci d'avoir tant regardé autour de vous!



1
votes

Il est très rare d'utiliser SyntaxError dans votre programme. Il n'est généralement utilisé pour l'interpréteur python que lorsqu'il rencontre une syntaxe invalide.

Le seul cas auquel je pense que vous pourriez jamais attraper une SyntaxError est si vous utilisez exec ou eval sur une valeur inconnue . Par exemple, si vous exécutiez une entrée utilisateur, l'entrée peut être invalide et vous devrez attraper SyntaxError .


0 commentaires