Получение имени, которое не определено из NameError в python - PullRequest
8 голосов
/ 16 февраля 2010

Как вы знаете, если мы просто сделаем:

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

Есть ли способ отловить исключение / ошибку и извлечь из него значение 'a'. Мне это нужно, потому что я eval использую некоторые динамически создаваемые выражения и хотел бы получить имена, которые в них не определены.

Надеюсь, я ясно дал понять. Спасибо! Manuel

Ответы [ 3 ]

6 голосов
/ 16 февраля 2010
>>> import re
>>> try:
...     a>0
... except (NameError,),e:
...     print re.findall("name '(\w+)' is not defined",str(e))[0]
a

Если вы не хотите использовать регулярные выражения, вместо этого вы можете сделать что-то подобное

>>> str(e).split("'")[1]
'a'
1 голос
/ 16 февраля 2010
>>> import exceptions
>>> try:
...     a > 0
... except exceptions.NameError, e:
...     print e
... 
name 'a' is not defined
>>> 

Вы можете проанализировать строку исключений для '', чтобы извлечь значение.

0 голосов
/ 05 июня 2013

Нет import exceptions необходимо в Python 2.x

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

Вы присваиваете ссылку для 'a' следующим образом:

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