2012-10-09 37 views
0

Whis腳本從源代碼中讀取藝術家名稱後面跟着括號的信息,其中包含藝術家是否取消以及他們來自哪個國家的信息。方法返回Unicode對象,分配到一個NoneType。在Python中

一個正常的句子可能看起來像:

奧德·諾德斯托加(NO)(已取消),20-08-2012,BLA

正如我導入數據,我把它們解碼成UTF-8,這個作品精細。取消註釋remove_extra()方法的else塊中的第二個註釋將顯示所有變量都是Unicode類型。

但是,當一個值被返回並放入另一個變量中並且測試它的值時,大多數變量似乎都是NoneType。

爲什麼會發生這種情況?如何糾正?似乎是方法返回和新變量賦值之間發生錯誤。

# -*- charset: utf-8 -*- 

import re 


f1 = open("oya_artister_2011.csv") 

artister = [] 
navnliste = [] 

PATTERN = re.compile(r"(.*)(\(.*\))") 
TEST_PAT = re.compile(r"\(.*\)") 

def remove_extra(tekst): 
    if re.search(PATTERN, tekst) > 1: 
     after = re.findall(PATTERN, tekst)[0][0] 
     #print "tekst is: %s " % tekst 
     #print "and of type: %s" % type(tekst) 
     remove_extra(after) 

    else: 
     #print "will return: ", tekst 
     #print "of type: %s" % type(tekst) 
     return tekst 


for line in f1: 
    navn, _rest = line.split(",",1) 
    navn = navn.decode("utf-8") 
    artister.append(navn) 


for artist in artister: 
    ny_artist = remove_extra(artist) 
    #print "%s" % ny_artist 
    print "of type: %s" % type(ny_artist) 

回答

1

嘗試

return remove_extra(after) 

,而不是僅僅

remove_extra(after) 
+0

謝謝你,這工作。如果我猜對了:問題是remove_extra(after)沒有返回值? – olovholm

+0

是的。調用'remove_extra(after)'你遞歸地調用了例程,然後拋棄結果。返回的值需要傳回給調用者。 –

相關問題