2012-05-29 44 views
1
def getValue(d, key): 
    for k, v in d.iteritems(): 
     print "{0} == {1}".format(k, key) 
     if k == key: 
      return v 
     elif isinstance(v, dict): 
      getValue(v, key) 
    logging.error("Cannot find key in dictionary") 
    return "" 

#d = getting the dictionary 

getValue(d, "error_frames") 

從插入函數的print語句中,我清楚地看到「error_frames == error_frames」出現在控制檯中,但if語句沒有執行。爲什麼?字典是通過用模塊xmltodict解析xml來構造的。爲什麼這些字符串不相等? (Python)

+2

嘗試打印'repr(k)'和'repr(key)'而不是使用'str.format'。 –

回答

6

也許print語句正在嵌套遞歸調用中執行。

elif isinstance(v, dict): 
     getValue(v, key) 

應該是return getValue(key)

+0

好(+1):我的直覺是這樣可以解決問題。 – mgilson

12

.format調用對象的__str__方法,其輸出對於不同的對象可以是相同的。

In [1]: a = 1 

In [2]: b = '1' 

In [3]: print '{0} == {1}'.format(a, b) 
1 == 1 

In [4]: a == b 
Out[4]: False 
+1

我認爲你的意思是'.format'調用'__str__' - 在這種情況下,print在一個字符串對象上調用'__str__',它只返回一個字符串。 – mgilson

+0

@mgilson - 你說得對,它是'格式'而不是'打印'。 – eumiro

相關問題