Search code examples
pythonexceptiondynamic-dataexpressionnameerror

Getting the name which is not defined from NameError in python


As you know, if we simply do:

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

Is there a way of catching the exception/error and extracting from it the value 'a'. I need this because I'm evaluating some dynamically created expressions, and would like to retrieve the names which are not defined in them.

Hope I made myself clear. Thanks! Manuel


Solution

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

    If you don't want to use regex, you could do something like this instead

    >>> str(e).split("'")[1]
    'a'