Прежде, чем кто-нибудь об этом упоминает, я уже перешел на stackoverflow и Google, чтобы найти ответ на этот вопрос, и я считаю, что я просто ошибаюсь.Извлечение NoneTypes из словаря
Я разбираю XML-документ и помещаю значения в переменные с помощью BeautifulSoup4. Прямо сейчас я читаю значения, перекодированные в словарь и итерации через словарь, чтобы найти нужные мне значения, однако, когда я хочу напечатать эти значения в отчете с шаблоном, я получаю следующую ошибку:
TypeError: coercing to Unicode: need string or buffer, NoneType found
Который я нашел, является результатом наличия значения None в качестве одного из значений в моем словаре. Решение. Я пытаюсь использовать способ перебора моего словаря в python 2.7 для удаления или замены значений NoneType, но ничего не работает. некоторые решения, которые я нашел, были функцией filter(None, list)
, for k, v in dictionary: if v in not None: list.append(item)
, clean = [x for x in list if x != None]
, используя лямбда, и так далее. Никто из них, похоже, не работает, что заставляет меня поверить, что я должен делать что-то неправильно. Например, это, как я создал свой словарь:
itemDict = []
for item in soup3.find_all('XMLTag'):
r = {
'definition1': item.Starttag.string,
'definition2': item.Stoptag.string,
'definition3': item.Filltag.string,
'definition4': item.Stoptag2.string,
}
itemDict.append(r)
но движется через него, чтобы избавиться или заменить NoneTypes в itemDict была боль. Конечный результат, который я планировал, заключался в том, чтобы помещать элементы в словаре в кусок кода шаблона для печати в виде отчета, например, """<Description>"""+item[0]['definition4']+"""</Description>"""
. Есть предположения?
EDIT:
решение было на самом деле очень просто благодаря Martijn Питерс и Steve Джессоп.
itemDic = []
for newdic in soup3.find_all("XMLTag"):
s = {
'definition1': newdic.Order.string,
'definition1': newdic.Code.string,
'definition1': newdic.Description.string,
}
for k in s:
if s[k] is None:
s[k] = ''
itemDic.append(s)
Это заменило все NoneTypes, которые натолкнулись на очистку XML, используя BeautifulSoup4 с пустыми строками. Аналогично, приведенный выше код также может заменить любое другое значение, которое пользователь хотел бы получить для данного условия. Так, например, если бы я хотел изменить каждый экземпляр «сказочного» на «все было хорошо», я заменил бы «None» на «fabulous» и пустую строку «,», «это было бы хорошо» и альт! Еще раз спасибо вам, ребята.
Распечатайте словарь до и после кода, чтобы удалить 'None' (или посмотреть его в отладчике). Это скажет вам, является ли это код, не содержащий ошибок, или что-то еще. –