Получение имени, которое не определено из NameError в python
Как вы знаете, если мы просто делаем:
>>> a > 0
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a > 0
NameError: name 'a' is not defined
есть ли способ поймать исключение / ошибку и извлечь из нее значение "a".
Мне это нужно, потому что я eval
uating некоторые динамически созданные выражения и хотел бы получить имена, которые не определены в них.
надеюсь, я ясно выразился. Спасибо! Мануэль!--3-->
3 ответов
>>> 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'
>>> import exceptions
>>> try:
... a > 0
... except exceptions.NameError, e:
... print e
...
name 'a' is not defined
>>>
вы можете проанализировать строку исключений для " извлечь значение.
нет 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