2014-09-17 6 views
7

Mam skrypt z tych dwóch funkcji:AttributeError: obiekt 'NoneType' nie ma atrybutu 'rozłam'

# Getting content of each page 
def GetContent(url): 
    response = requests.get(url) 
    return response.content 

# Extracting the sites 
def CiteParser(content): 
    soup = BeautifulSoup(content) 
    print "---> site #: ",len(soup('cite')) 
    result = [] 
    for cite in soup.find_all('cite'): 
     result.append(cite.string.split('/')[0]) 
    return result 

Kiedy uruchamiam program, mam następujący błąd: Próbka

result.append(cite.string.split('/')[0]) 
AttributeError: 'NoneType' object has no attribute 'split' 

Output :

URL: <URL That I use to search 'can be google, bing, etc'> 
---> site #: 10 
site1.com 
. 
. 
. 
site10.com 

URL: <URL That I use to search 'can be google, bing, etc'> 
File "python.py", line 49, in CiteParser 
    result.append(cite.string.split('/')[0]) 
AttributeError: 'NoneType' object has no attribute 'split' 
+0

można podać przykład wejście dla parametru partnerskiej? – Bryan

+1

'cite.string' zwraca ci' NoneType' – cppcoder

+0

@ cppcoder Jak mogę się pozbyć tego błędu? – MLSC

Odpowiedz

7

to może się zdarzyć, że ciąg ma nic w środku, niż jest „brak” typu, więc co mogę przypuszczać, jest sprawdzenie, Pierwszy, jeśli ciąg nie jest „Brak”

# Extracting the sites 
def CiteParser(content): 
    soup = BeautifulSoup(content) 
    #print soup 
    print "---> site #: ",len(soup('cite')) 
    result = [] 
    for cite in soup.find_all('cite'): 
     if cite.string is not None: 
      result.append(cite.string.split('/')) 
      print cite 
    return result 
+0

Tak ... Myślę, że to jest to, czego potrzebowałem ... Pozwól mi sprawdzić ... Dzięki – MLSC

+4

Aby sprawdzić' NoneType', lepiej jest użyć 'is' lub 'nie jest', zamiast' == 'lub'! = ' – cppcoder

+0

Tak, zgadzam się z tym, że nie było tak pythonic. – user1767754

1
for cite in soup.find_all('cite'): 
    if((cite.string is None) or (len(cite.string) == 0)): 
     continue 
    result.append(cite.string.split('/')[0]) 
+0

Dziękuję za odpowiedź .... – MLSC

+0

Mam również błąd: 'TypeError: obiekt typu" NoneType "nie ma len()' .. Myślę, że powinienem usunąć 'lub (len (cite.string) == 0)) '... tak? – MLSC

+1

Możesz to usunąć. Ale sprawdzanie len zostało celowo wykonane jako drugie w celu sprawdzenia None, aby żadne obiekty nie były sprawdzane pod kątem len. – cppcoder