获取没有从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
答
>>> 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
如果没有定义,h它可以有价值吗? – 2010-02-16 05:09:17
我想提取名称,而不是值。我说“价值'a'”,而不是“a的价值”。 – 2010-02-16 05:10:55
为什么你需要使用'eval'?如果你想创建一个Python shell,这不是正确的工具。如果你想为你的应用程序创建一个表达式求值器,这不是正确的工具。 – 2010-02-16 06:36:07