8

如您所知,如果我们只是这样做:

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

有没有办法捕获异常/错误并从中提取值'a'。我需要这个,因为我正在eval使用一些动态创建的表达式,并且想检索其中未定义的名称。

希望我说清楚了。谢谢!曼努埃尔

4

3 回答 3

6
>>> 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'
于 2010-02-16T05:15:32.823 回答
1
>>> import exceptions
>>> try:
...     a > 0
... except exceptions.NameError, e:
...     print e
... 
name 'a' is not defined
>>> 

您可以解析 '' 的异常字符串以提取值。

于 2010-02-16T05:14:14.667 回答
1

import exceptionsPython 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
于 2013-06-05T01:35:28.767 回答