获取没有从NameError在Python中定义的名称

问题描述:

如你所知,如果我们简单地做:获取没有从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使用了一些动态创建的表达式,并且想要检索未在其中定义的名称。

希望我说清楚了。 谢谢! Manuel

+0

如果没有定义,h它可以有价值吗? – 2010-02-16 05:09:17

+1

我想提取名称,而不是值。我说“价值'a'”,而不是“a的价值”。 – 2010-02-16 05:10:55

+1

为什么你需要使用'eval'?如果你想创建一个Python shell,这不是正确的工具。如果你想为你的应用程序创建一个表达式求值器,这不是正确的工具。 – 2010-02-16 06:36:07

>>> 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