无法分辨为什么我收到“ TypeError:无法将'int'对象隐式转换为str“错误

时间:2019-06-06 02:53:56

标签: python-3.x

我正在教自己编写代码,所以如果答案很明显或我的代码很残破,请原谅我。我尝试将一个简单的搜索引擎组合在一起,该引擎可以计算单词出现的次数,但是我不断收到上述错误消息,因此我什至无法对其进行测试。知道我在做什么错吗?

def search(text_body, phrase):
    count = 0
    word_length = len(phrase)
    for i in text_body:
        if phrase == text_body[i:i+word_length]:
            count +=1 
    return count

text_body = "text text text text text"
phrase = input("Search for: ")
final_count = search(text_body, phrase)

print(final_count)

编辑:抱歉,完整的错误消息在这里:

Traceback (most recent call last):                                                                                                             
  File "main.py", line 21, in <module>                                                                                                         
    final_count = search(text_body, phrase)                                                                                                    
  File "main.py", line 14, in search                                                                                                           
    if phrase == text_body[i:i+word_length]:                                                                                                   
TypeError: Can't convert 'int' object to str implicitly 

3 个答案:

答案 0 :(得分:1)

其他人已经很好地解释了为什么您的代码被破坏,并且提供了很好的解决方案,但是为了演示这一点,我们可以看一下简单的for循环:

text_body = "text"
for i in text_body:
    print(i)

哪些印刷品:

t
e
x
t

您可以从中在代码段中看到

text_body[i:i+word_length]

您正在尝试:

text_body['t':'t'+5]

这就是为什么Python感到困惑的原因,因为您试图将一个字符串添加到int,从而导致错误。

需要特别注意的是Python strings actually have a method for exactly what you're doing already

>>> "text text text text text".count("text")
5

或者,对于您的情况:

text_body.count(phrase)

答案 1 :(得分:0)

ifor i in text_body:的值是text_body中的下一个字符(一个字符的字符串)。您不能在i+word_length中添加数字和字符串。您应该遍历索引:

for i in range(len(text_body)):

最好使用text_body.index函数。

答案 2 :(得分:0)

当python执行时

for i in text_body:
    if phrase == text_body[i:i + word_length]:
        count += 1 

search的定义中,值i拾取每个元素而不是索引,因此i + word_length引发TypeError。这是解决方案,使用range()代替for i in text_body

for i in range(len(text_body)):
    if phrase == text_body[i:i + word_length):
        count += 1