2015-03-12 3 views
0

Я работаю с JSON в моей программе питонаPython получать исключение KeyError при работе с JSON

temp = json.loads(text2) 
data = temp["data"] 
try: 
    ld = data["all"] 
    globals()['currentbrowserall'] = ld 
    del data["all"] 
except: 
    s = str(sys.exc_info()[0]) 
    s2 = str(sys.exc_info()[1]) 
    s3 = str(sys.exc_info()[2]) 
    print "%s, %s, %s" % (s, s2, s3) 

проблема, я продолжаю получать exceptions.KeyError на «все», а каждый раз, когда ключ находится там и как хорошо данные и все работает так, как должно, но выводит ошибку. Зачем? здесь что-то не так?

Вот образец JSON

{ 
    "data": { 
    "all": [ 
    { 
    "focused": false, 
    "windowId": 469, 
    "tabs": [ 
     { 
     "active": false, 
     "title": "Update Driver Booster", 
     "url_short": "www.iobit.com" 
     } 
    ] 
    } 
], 
"timeline": [ 
    { 
    "hostname": "www.youtube.com", 
    "startStr": "8:31", 
    "duration": 317, 
    "endStr": "8:36", 
    "startDate": { 
     "hours": 8, 
     "minutes": "31" 
    }, 
    "endDate": { 
     "hours": 8, 
     "minutes": "36" 
    } 
    }, 
    { 
    "hostname": "stackoverflow.com", 
    "startStr": "8:50", 
    "duration": 110, 
    "endStr": "8:52", 
    "startDate": { 
     "hours": 8, 
     "minutes": "50" 
    }, 
    "endDate": { 
     "hours": 8, 
     "minutes": "52" 
    } 
    } 
] 
    } 
} 
+3

Как мы должны знаете, что вы его кормите? –

+1

просто выполните 'temp.keys()' и 'data.keys()' после 'data = temp [" data "]' statement. –

+1

предоставляют данные ввода json? –

ответ

0

Я уверен, что ваш data ДИКТ не имеет атрибут называется all: -

  1. Проверьте это, напечатав Dict перед использованием del (print data).
  2. Используйте следующие действия, чтобы гарантировать, что Вы не получите исключение: -

    если data.has_key ('все'): дель данных [ 'все']

Смежные вопросы