从python中的NameError获取未定义的名称

2024-09-28 20:19:38 发布

您现在位置: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导出一些动态创建的表达式,并希望检索其中未定义的名称。

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


Tags: nameinmostislinenotcallfile
3条回答
>>> import exceptions
>>> try:
...     a > 0
... except exceptions.NameError, e:
...     print e
... 
name 'a' is not defined
>>> 

可以分析“”的异常字符串以提取值。

Python 2.x不需要import exceptions

>>> 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
>>> import re
>>> try:
...     a>0
... except (NameError,),e:
...     print re.findall("name '(\w+)' is not defined",str(e))[0]
a

如果你不想使用regex,你可以这样做

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

相关问题 更多 >