7

如你所知,如果我們簡單地做:獲取沒有從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

+0

如果沒有定義,h它可以有價值嗎? – 2010-02-16 05:09:17

+1

我想提取名稱,而不是值。我說「價值'a'」,而不是「a的價值」。 – 2010-02-16 05:10:55

+1

爲什麼你需要使用'eval'?如果你想創建一個Python shell,這不是正確的工具。如果你想爲你的應用程序創建一個表達式求值器,這不是正確的工具。 – 2010-02-16 06:36:07

回答

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

您可以解析異常字符串以提取值。

0

沒有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 
相關問題