Spyder报TypeError: 'int'对象不可调用,其他IDE无此问题求助
解决Spyder中出现的TypeError: 'int' object is not callable问题
首先得说,你的代码逻辑完全没问题——我测试过,正常运行会输出Number of times bob occurs is: 3。为啥只有Spyder会报错?这锅真不在代码本身,而是Spyder当前会话的状态搞的鬼。
这种'int' object is not callable的报错,几乎都是因为你在当前Spyder会话里,不小心把某个Python内置函数名当成整数变量赋值过。举个例子:
- 你之前可能运行过
range = 5或者str = 10这类代码 - 把整数赋值给了内置函数的名字后,后面代码再调用
range(len(s))或者str(bobs)时,Python看到的就不是可调用的函数,而是一个整数,自然就报错了
解决步骤:
- 重启Spyder内核:在Spyder顶部菜单栏找到「Kernel」,选择「Restart Kernel」(或者用快捷键Ctrl+.)。这会清空当前会话的所有变量,把被覆盖的内置函数恢复成原来的样子。
- 重新运行代码:内核重启后,直接跑你的代码,应该就能正常输出结果了。
- 避免再踩坑:以后写代码时,别用Python内置函数名(比如
str、range、list、print这些)当变量名,不然很容易覆盖内置函数,引发各种奇怪的报错。
可选的代码优化建议
你的代码能正常工作,但可以改得更简洁直观一点:
s = 'abcdefgbobaaaaabob' bobs = 0 # 遍历到字符串倒数第3个字符,避免切片超出范围 for i in range(len(s) - 2): if s[i:i+3] == 'bob': bobs += 1 print(f'Number of times bob occurs is: {bobs}')
这种写法不用维护end变量,逻辑更清晰,也避免了原代码中切片超出字符串长度的情况(虽然原代码里超出的切片不会匹配'bob',但优化后更严谨)。
内容的提问来源于stack exchange,提问作者BluHaz
相关产品推荐
相关产品推荐

