AttributeError: у объекта 'NoneType' нет атрибута 'кодировать' с помощью lxml-python - PullRequest
0 голосов
/ 28 марта 2012

Я получаю AttributeError: 'NoneType' object has no attribute 'encode' ошибку при разборе некоторых данных изобретателя XML-патента. Я пытаюсь вытащить первого изобретателя и его адресную информацию в строку, как показано ниже:

inventor1 = first(doc.xpath('//applicants/applicant/addressbook/last-name/text()'))
inventor2 = first(doc.xpath('//applicants/applicant/addressbook/first-name/text()'))
inventor3 = first(doc.xpath('//applicants/applicant/addressbook/address/city/text()'))
inventor4 = first(doc.xpath('//applicants/applicant/addressbook/address/state/text()'))
inventor5 = first(doc.xpath('//applicants/applicant/addressbook/address/country/text()'))
inventor = str(inventor2.encode("UTF-8")) + " " + str(inventor1.encode("UTF-8"))
inventors2 = str(inventor3.encode("UTF-8")) + ", " + str(inventor4) + ", " + str(inventor5)
inventors = str(inventor) + ", " + str(inventors2)

print "DocID: {0}\nGrantDate: {1}\nApplicationDate: {2}\nNumber of Claims: {3}\nExaminers: {4}\nAssignee: {5}\nInventor: {6}\n".format(docID,grantdate,applicationdate,claimsNum,examiners.encode("UTF-8"),assignees,inventors)

но есть проблема, поскольку в этом длинном xml есть UnicodeEncodeError: 'ascii' codec can't encode character для нескольких частей. Мне нужно иметь .encodes в моем питоне, чтобы я не создавал ошибку, но при этом я получаю это:

Traceback (most recent call last):
  File "C:\Documents and Settings\Desktop\FINAL BART INFO ONE.py", line 87, in <module> inventor = str(inventor2.encode("UTF-8")) + " " + str(inventor1.encode("UTF-8"))
AttributeError: 'NoneType' object has no attribute 'encode'

Есть ли какой-либо способ игнорировать значения None, которые возвращаются, когда ничего нет? Должен ли я def или использовать другой тип .encode для моего print?

Кстати, я создаю базу данных из входного файла на самом деле несколько файлов XML, добавляя в один файл. (Файл данных взят из Google Patents ).

1 Ответ

4 голосов
/ 28 марта 2012

Вы всегда можете сделать быстро и грязно str(inventor1.encode("UTF-8") if inventor1 else inventor1)

...