Python 程序在执行其他操作时跳过 导入请求 从bs4导入BeautifulSoup 计数=1 一边数数!=0: def计数单词(url,单词): r=requests.get(url,allow\u redirects=False) 汤=BeautifulSoup(r.含量,'lxml') words=soup.find(text=lambda text:text和文本中的单词) 印刷品(字) 返回len(字) def main(): url=“” 单词=“” count=count\u单词(url,单词) 打印('\nUrl:{}\n包含{}个单词的出现次数:{}'。格式(url、计数、单词)) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main() 其他: 打印(“成功!”)

Python 程序在执行其他操作时跳过 导入请求 从bs4导入BeautifulSoup 计数=1 一边数数!=0: def计数单词(url,单词): r=requests.get(url,allow\u redirects=False) 汤=BeautifulSoup(r.含量,'lxml') words=soup.find(text=lambda text:text和文本中的单词) 印刷品(字) 返回len(字) def main(): url=“” 单词=“” count=count\u单词(url,单词) 打印('\nUrl:{}\n包含{}个单词的出现次数:{}'。格式(url、计数、单词)) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main() 其他: 打印(“成功!”),python,Python,TypeError:类型为“NoneType”的对象没有len() 我真的不明白为什么我会收到这个错误消息,如果网站有这个特定的词,它会一直重复,直到这个词消失。 但是当这个词不再出现在网站上时,我会收到这个错误消息,它甚至不会打印“Success!”。有人知道它为什么跳过else部分吗?问题是,如果没有找到任何单词,则函数将返回none。并且不能调用None类型的len()。 因此,您必须首先检查其None,如果是这种情况,则返回0 比如: 如果单词不是其他len(单词),则返回0 最后是一个

TypeError:类型为“NoneType”的对象没有len()

我真的不明白为什么我会收到这个错误消息,如果网站有这个特定的词,它会一直重复,直到这个词消失。
但是当这个词不再出现在网站上时,我会收到这个错误消息,它甚至不会打印“Success!”。有人知道它为什么跳过else部分吗?

问题是,如果没有找到任何单词,则函数将返回none。并且不能调用
None
类型的
len()。
因此,您必须首先检查其
None
,如果是这种情况,则返回0

比如:

如果单词不是其他len(单词),则返回0

最后是一个快速提醒。如果words为None,并且返回0,那么将以一个无休止的循环结束。因为您的
count=1
是一个全局变量,您在
main
函数中定义了一个局部变量
count
。要克服这一点,您必须在主系统中执行以下操作:

import requests
from bs4 import BeautifulSoup

count = 1

while count != 0:
    def count_words(url, the_word):
        r = requests.get(url, allow_redirects=False)
        soup = BeautifulSoup(r.content, 'lxml')
        words = soup.find(text=lambda text: text and the_word in text)
        print(words)
        return len(words)


    def main():
        url = '<URL>'
        word = '<Word>'
        count = count_words(url, word)
        print('\nUrl: {}\ncontains {} occurrences of word: {}'.format(url, count, word))

    if __name__ == '__main__':
        main()
else:
    print("Success!")

我也会考虑改变代码,把while循环放在计数字的函数中。

在调用后,代码的输出是什么?打印(文字)< /代码>?注意:请不要在一个循环内删除一个函数,我认为可以缩短到<代码>返回LeN(单词),如果布尔(单词)0个< /代码>
def main():
    ....
    global count
    count = count_words(url, word)