AttributeError: объект 'NoneType' не имеет атрибута 'strip'
Это означает именно то, что написано: url.strip()
требует сначала выяснить, что такое url.strip
, то есть поиск атрибута strip
в url
. Это не удалось, потому что url
является 'NoneType' object
, то есть объектом с типом NoneType
, то есть специальным объектом None
.
Предположительно url
должен был быть str
, то есть текстовой строкой, поскольку они имеют атрибут strip
.
Это произошло в File "C:\Python28\lib\urllib.py"
, то есть в модуле urllib
. Это не ваш код, поэтому мы просматриваем трассировку исключений, пока не найдем что-то написанное: request = urllib2.Request(new_url)
. Мы можем только предполагать, что new_url
, который мы передаем в модуль urllib2
, в конечном итоге становится переменной url
где-то в пределах urllib
.
Так откуда взялась new_url
? Мы ищем строку кода, о которой идет речь (обратите внимание, что в трассировке исключений есть номер строки), и мы видим, что непосредственно предыдущей строкой является new_url = get_more_tweets(new_soup)
, поэтому мы используем результат для get_more_tweets
.
Анализ этой функции показывает, что она просматривает некоторые ссылки, пытается найти одну, помеченную «больше», и дает нам URL для первой такой ссылки, которую она находит. Случай, который мы не рассмотрели, это когда таких ссылок нет. В этом случае функция просто достигает конца и неявно возвращает None (именно так Python обрабатывает функции, которые достигают конца без явного возврата, поскольку в Python нет спецификации возвращаемого типа и поскольку значение всегда должно возвращаться) отсюда исходит это значение.
Предположительно, если нет ссылки «больше», то мы не должны пытаться перейти по ссылке вообще. Поэтому мы исправляем ошибку, явно проверяя это возвращаемое значение None
и пропуская urllib2.Request
в этом случае, так как нет ссылки для перехода.
Кстати, это значение None
будет более идиоматическим значением "заполнителя" для еще не определенного currenttime
, чем значение False
, которое вы используете в настоящее время. Вы также можете подумать о том, чтобы быть более последовательным в разделении слов и подчеркиваний в именах переменных и методов, чтобы было легче читать. :)