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?
3 Réponses :
Je pense que la documentation est explicite: p>
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 ()
oueval ()
, ou lors de la lecture du script initial ou de l'entrée standard (également interactivement).
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.
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.
Belle réponse technique! Merci d'avoir tant regardé autour de vous!
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
.
Il peut être utilisé pour gérer des éléments analysés à l'aide de
ast.literal_eval
par exemple.