【问题标题】:Getting the name which is not defined from NameError in python从 python 中的 NameError 获取未定义的名称
【发布时间】:2011-01-17 06:24:22
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果没有定义,怎么会有值?
  • 我想提取名称,而不是值。我说的是“a 的值”,而不是“a 的值”。
  • 为什么需要使用eval?如果你想创建一个 Python shell,这不是正确的工具。如果您想为您的应用程序创建表达式评估器,这不是正确的工具。
  • 什么是合适的工具? -.- 您可以在之前的评论中包含它...

标签: python exception-handling dynamic-data expression nameerror


【解决方案1】:
>>> 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'

【讨论】:

    【解决方案2】:
    >>> import exceptions
    >>> try:
    ...     a > 0
    ... except exceptions.NameError, e:
    ...     print e
    ... 
    name 'a' is not defined
    >>> 
    

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

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 2021-10-18
        • 2016-08-09
        • 2016-01-08
        相关资源
        最近更新 更多