2012-05-29 4 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

'str.format' 대신'repr (k)'와'repr (key)'를 출력 해보십시오. –

답변

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 - 당신 말이 맞아요, 그것은'print'가 아니라'format'이었습니다. – eumiro

관련 문제