2014-10-31 2 views
0

в fucntion getLink(urls), я return (cloud,parent,children) в основной функции, у меня есть (cloud,parent,children) = getLink(urls) и я получил ошибку этой линии: TypeError: объект «NoneType» не итерацияя получил aTypeError: объект «NoneType» не итерации

родителями и детьми являются все list http ссылки. так как он не может вставить их здесь, родительский список содержит около 30 ссылок; children - список содержит около 30 предметов, каждый элемент - около 10-100 ссылок, которые делятся на «,».

облако список содержит около 100 слов, как это: [ 'официальный магазин', 'Java-апплеты Центр', 'О Google', 'История веб-поиска' .....]

Я знаю didnot почему я получаю сообщение об ошибке. Что-то не так в прохождении параметра? Или потому, что список занимает слишком много места?

#crawler url: read webpage and return a list of url and a list of its name 
def crawler(url): 
    try: 
     m = urllib.request.urlopen(url) 
     msg = m.read() 
.... 
     return (list(set(list(links))),list(set(list(titles)))) 
    except Exception: 
     print("url wrong!") 

#this is the function has gone wrong: it throw an exception here, also the error I mentioned, also it will end while before len(parent) reach 100. 
def getLink(urls): 
    try: 
     newUrl=[] 
     parent = [] 
     children =[] 
     cloud =[] 
     i=0 

     while len(parent)<=100: 

      url = urls[i] 
      if url in parent: 
       i += 1 
       continue 
      (links, titles) = crawler(url) 
      parent.append(url) 
      children.append(",".join(links)) 
      cloud = cloud + titles 
      newUrl= newUrl+links 
      print ("links: ",links) 
      i += 1 
      if i == len(urls): 
       urls = list(set(newUrl)) 
       newUrl = [] 
       i = 0 

     return (cloud,parent,children) 
    except Exception: 
     print("can not get links") 


def readfile(file): 
    #not related, this function will return a list of url 

def main(): 
    file='sampleinput.txt' 
    urls=readfile(file) 
    (cloud,parent,children) = getLink(urls) 

if __name__=='__main__': 
    main() 
+1

Вы можете иметь другие 'return' в функции или неявной' None' как возвращаемое значение. – Matthias

ответ

1

Там может быть так, что ваша функция заканчивается без достижения явного return заявления.

Посмотрите на следующий примерный код.

def get_values(x): 
    if x: 
     return 'foo', 'bar' 

x, y = get_values(1) 
x, y = get_values(0) 

Когда функция вызывается с 0 в качестве параметра return пропускается, и функция будет возвращать None.

Вы можете добавить явную return в качестве последней строки вашей функции. В примере, приведенном в этом ответе, это будет выглядеть так.

def get_values(x): 
    if x: 
     return 'foo', 'bar' 
    return None, None 

Update после Seing код

Когда исключение срабатывает в get_link вы просто напечатать что-нибудь и вернуться из функции. У вас нет инструкции return, поэтому Python вернет None. Вызывающая функция теперь пытается развернуть None на три значения и это терпит неудачу.

Измените обработку исключений, чтобы вернуть кортеж с тремя значениями, как вы это делаете, когда все в порядке. Использование None для каждого значения - хорошая идея, поскольку это показывает вам, что что-то пошло не так. Кроме того, я не буду ничего печатать в этой функции. Не смешивайте бизнес-логику и ввод/вывод.

except Exception: 
    return None, None, None 

Затем в основной функции используйте следующее:

cloud, parent, children = getLink(urls) 
if cloud is None: 
    print("can not get links") 
else: 
    # do some more work 
+0

Я пытаюсь пересмотреть код и добавить простую попытку: ... ожидать исключения, и это исключение. ошибка также есть. Я не уверен, как это понять. T_T – b1694621

+0

Разложите свой код на минимальный пример и добавьте его в свой вопрос. Просто сказал: «Есть исключение, что мне делать?» это то же самое, что спрашивать: «Я болен, какое лекарство я должен принимать?». Дайте нам детали для работы. – Matthias

+0

Я добавил связанный код на вопрос. Он добавит больше комментариев в код в ближайшее время. Большое спасибо. – b1694621

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