2012-03-28 26 views
0

一部のXML特許発明者データを解析するときにAttributeError: 'NoneType' object has no attribute 'encode'エラーが発生します。私はそのような以下のように文字列に最初の発明に加えて、そのアドレスのINFOMATIONを引くしようとしている:AttributeError: 'NoneType'オブジェクトにlxml-pythonで 'エンコード'属性がありません

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があるとして問題があります。私は自分のpython内.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' 

はとにかくあり何もないときに返され、「なし」の値を無視するのいずれかに?私はdefでなければなりませんか、printには別のタイプの.encodeを使用してください。

ところで、入力ファイルからデータベースを作成する方法は、実際には1つのファイルに複数のXMLファイルを追加することです。 (データファイルのソースはGoogle Patents)。

答えて

4

あなたはいつもちょうど私が `inventors2 = STR(inventor3.encode( "UTF-8"))+ "" + STR(inventor4)されて次の行に上のエラーが発生した迅速かつ汚いstr(inventor1.encode("UTF-8") if inventor1 else inventor1)

+0

を行うことができます'。 'str(inventor4 if inventor4 if inventor4)'のようにあなたの提案を入れることができますか?これは効果がありますか? –

+0

さて、そこには何の意味もないでしょう。もしあなたが他の人であると言っているのなら、いつもaを得るでしょう。 xとzが異なる場合は、y else zの場合はxへの唯一のポイントがあります。とにかくinventor4の問題ではなく、inventor2のエンコードコールと同じです。そして、それについては、もう一度x if y else zを使うことができます。ここではもっと大きな疑問がありますが、これは何らかのループですべてをやっているだけではありません。 –

+0

ちょっとあなたの権利 - 私はそれが働くようになった。私はあなたが '発明家2 'のために言ったように、それらを.encodesに置きました。私がこのようにしている理由は、A)私の上司は、この方法でデータを作成して理解できるようにしたいと思っています。B)私はPythonに関するこの知識に限られています。私が解析しているときに必要なものすべて。役に立つ回答ありがとう+1 –

関連する問題