2014-09-17 5 views
7

У меня есть сценарий с этими двумя функциями:AttributeError: объект «NoneType» не имеет атрибут «раскол»

# 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 

Когда я запускаю программу, у меня есть следующее сообщение об ошибке:

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

Выход пробы :

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

Можете ли вы предоставить пример ввода параметра контента? – Bryan

+1

'cite.string' возвращает вам' NoneType' – cppcoder

+0

@cppcoder Как я могу избавиться от этой ошибки? – MLSC

ответ

7

это может случиться, что строка не имеет ничего внутри, чем тип «None», так что я могу предположить, чтобы проверить первых, если ваша строка не является «None»

# 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

Да ... Я думаю, что это то, что мне нужно ... позвольте мне проверить ... Спасибо – MLSC

+4

Для проверки' NoneType', предпочтительно использовать 'is' или 'is not', а не' == 'или'! = ' – cppcoder

+0

Да, я согласен с этим, это было не так 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

Спасибо за ответ .... – MLSC

+0

У меня также есть ошибка: 'TypeError: объект типа 'NoneType' не имеет len()' .. Я думаю, что я должен удалить 'или (len (cite.string) == 0)) '... да? – MLSC

+1

Вы можете удалить это. Но len check был намеренно сделан вторым, чтобы проверить None, чтобы ни один объект не был проверен на len. – cppcoder

Смежные вопросы