2016-07-04 49 views
0

我運行下面的代碼:如何解決nonetype對象在Python中沒有屬性編碼錯誤2.7

from __future__ import unicode_literals 
import xml.etree.ElementTree as ET 
tree = ET.parse('dblp_16.xml') 
root = tree.getroot() 
f = open('hi', 'w') 
for country in root.findall('article'): 
    rank = country.find('year').text 
    name = country.find('title') 

    if(int(rank)>2009): 
     f.write(name.text.encode('utf8')) 
     f.write(':') 
     auth = country.findall('author') 
     for a in auth: 
      #print str(a) 
      f.write(a.text.encode('utf8')) 
      f.write(',') 
     f.write('\n') 

錯誤,同時運行上面的代碼發生:「nonetype對象沒有屬性編碼」。如何解決它?

+2

* 「如何解決這個問題?」 * - 如果不調用'編碼()''上None'。看看你的XML,並考慮這可能發生的地方。 – Tomalak

+0

'name.text'或'a.text'之一是* empty *或者不包含*僅僅是一個文本節點,所以返回'None'。 'None'沒有'.encode()'方法。 –

+0

@MartijnPieters:我怎麼解決這個問題? – SAMAHA

回答

2

只需選中if name.text is not None

from __future__ import unicode_literals 
import xml.etree.ElementTree as ET 
tree = ET.parse('dblp_16.xml') 
root = tree.getroot() 
f = open('hi', 'w') 
for country in root.findall('article'): 
    rank = country.find('year').text 
    name = country.find('title') 
    if not name.text: 
     continue 
    if(int(rank)>2009): 
     f.write(name.text.encode('utf8')) 
     f.write(':') 
     auth = country.findall('author') 
     for a in auth: 
      #print str(a) 
      f.write(a.text.encode('utf8')) 
      f.write(',') 
     f.write('\n') 
+1

:非常感謝,我的問題解決了。 – SAMAHA

+0

沒問題,下次嘗試更多地指定你的問題:) –

相關問題