获取Python中NameError未定义的变量名

8 投票
3 回答
15083 浏览
提问于 2025-04-15 19:20

如你所知,如果我们简单地这样做:

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

有没有办法捕捉到这个异常/错误,并从中提取出值'a'?我需要这样做,因为我正在处理一些动态生成的表达式,并想要找出其中未定义的名称。

希望我说得清楚。谢谢!

马努埃尔

3 个回答

1

在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
1
>>> import exceptions
>>> try:
...     a > 0
... except exceptions.NameError, e:
...     print e
... 
name 'a' is not defined
>>> 

你可以解析异常字符串中的''来提取值。

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'

如果你不想使用正则表达式,可以试试这样做:

撰写回答