2014-09-17 14 views
7

Ho uno script con queste due funzioni:AttributeError: oggetto 'NoneType' non ha alcun attributo 'split'

# 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 

Quando eseguo programma che ho il seguente errore: Esempio

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

uscita :

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

Si può fornire esempio di input per il parametro contenuti? – Bryan

+1

'cite.string' ti restituisce un' NoneType' – cppcoder

+0

@cppcoder Come posso eliminare questo errore? – MLSC

risposta

7

può succedere, che la stringa non ha nulla dentro, di quello che è di tipo "Nessuno", quindi cosa posso supporre è quello di verificare prima se la stringa non è "Nessuno"

# 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

Sì ... penso che questo è quello che mi serviva ... fammi controllare ... Grazie – MLSC

+4

Per il controllo di' NoneType', è preferibile usare 'is' o 'is not' piuttosto che' == 'or'! = ' – cppcoder

+0

Sì, sono d'accordo, non era così pignolo. – 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

Grazie per la risposta .... – MLSC

+0

Ho anche errore: 'TypeError: oggetto di tipo 'NoneType' non ha len()' .. Penso che dovrei rimuovere 'or (len (cite.string) == 0)) '... si? – MLSC

+1

Puoi rimuoverlo. Ma il controllo di len è stato intenzionalmente eseguito in secondo luogo rispetto a Nessuno, in modo che gli oggetti Nessuno non vengano controllati per len. – cppcoder