7

Comme vous le savez, si nous faisons simplement:Obtenir le nom qui n'est pas défini de NameError en python

>>> a > 0 
Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    a > 0 
NameError: name 'a' is not defined 

Est-il possible d'attraper l'exception/erreur et en extraire la valeur « a ». J'ai besoin de cela parce que je suis eval en utilisant des expressions créées dynamiquement, et je voudrais récupérer les noms qui n'y sont pas définis. J'espère que je me suis fait comprendre. Merci! Manuel

+0

Si ce n'est pas défini, h Comment peut-il avoir une valeur? –

+1

Je veux extraire le nom, pas la valeur. J'ai dit "la valeur" a "", pas "la valeur d'un". –

+1

Pourquoi avez-vous besoin d'utiliser 'eval'? Si vous voulez créer un shell Python, ce n'est pas le bon outil. Si vous voulez créer un évaluateur d'expression pour votre application, ce n'est pas le bon outil. –

Répondre

6
>>> import re 
>>> try: 
...  a>0 
... except (NameError,),e: 
...  print re.findall("name '(\w+)' is not defined",str(e))[0] 
a 

Si vous ne souhaitez pas utiliser regex, vous pourriez faire quelque chose comme ça à la place

>>> str(e).split("'")[1] 
'a' 
1
>>> import exceptions 
>>> try: 
...  a > 0 
... except exceptions.NameError, e: 
...  print e 
... 
name 'a' is not defined 
>>> 

Vous pouvez analyser la chaîne d'exceptions pour '' pour extraire la valeur.

0

Pas import exceptions nécessaire en Python 2.x

>>> try: 
...  a > 0 
... except NameError as e: 
...  print e.message.split("'")[1] 
... 
a 
>>> 

Vous attribuez la référence pour 'a' en tant que tel:

>>> try: 
...  a > 0 
... except NameError as e: 
...  locals()[e.message.split("'")[1]] = 0 
... 
>>> a 
0 
Questions connexes