#python #database #dictionary #try-catch #keyerror
#python #База данных #словарь #попробуйте-поймайте #keyerror
Вопрос:
Я создаю таблицу с данными, полученными из запроса sparql. Проблема в том, что некоторые записи не имеют значения в базе данных, и когда я создаю таблицу, я получаю исключение keyerror. Как обработать исключение так, чтобы в полях, где срабатывает исключение, не было указано None? Пока значения None помещаются во всю строку, но исключение существует только в одной ячейке этой строки… Код Python приведен ниже:
for j in range(len(results['results']['bindings'])): # effective results from database
try:
data.append([[results['results']['bindings'][j][results['head']['vars'][i]]['value']] for i in
range(len(results['head']['vars']))])
except KeyError:
data.append([None]) # get each line sepparately
KeyError исключения возникает из-за того, что некоторые записи в базе данных имеют значение NULL, но код также ищет их. Как это решить?
Фактическая таблица приведена ниже:
Здесь только срок службы батареи должен быть None, но результаты отсутствуют во всей строке.
Комментарии:
1. Просто использовать
dict.get
?
Ответ №1:
Я бы рекомендовал не использовать понимание списка здесь. Код нечитаем
после того, как вы распакуете свой код, вы можете действовать по-разному:
- проверьте, существует ли ключ:
if key in dict
- вернуть ключ по умолчанию:
dict.get(test, None)
Комментарии:
1. но без понимания списка результаты будут разными (если я использую 2 разных «for»)
2. любое понимание списка совместимо с циклами for. просто создайте список, затем заполните этот список в цикле for. затем добавьте этот список к своим данным.
3. @Viktor,
my_list = [] for i in range(len(results['head']['vars'])): my_list.append([results['results']['bindings'][j][results['head']['vars'][i]]['value']]) data.append(my_list)