Python提取字符串首中尾字符报TypeError: 'str' object is not callable
错误排查与修复
报错核心诱因
你遇到的TypeError: 'str' object is not callable是Python里非常典型的调用错误,结合你说的「处理最后一个字符环节触发」的场景,99%是下面两种错误写法导致的:
- 手滑把字符串索引的方括号
[]写成了圆括号():比如你实际写取最后一位的代码时,写的是txt(l-1)而不是正确的txt[l-1]——圆括号是函数调用语法,这行代码相当于把字符串类型的txt当函数执行,自然会报“字符串不可调用”的错误。 - 代码前面自定义了名为
str的变量,把Python内置的str()类型转换函数覆盖成了字符串值,后续再写str(xxx)尝试做类型转换时,就相当于调用一个字符串变量,触发同类报错。
另外你贴出来的示例代码本身还有逻辑错误:你写的res = res + str(l-1)是把最后一个字符的索引值转成字符串拼到结果里了,根本没有取原字符串的最后一个字符,比如输入长度为5的字符串,这里会拼上字符串"4",不是原串的最后一位内容。
正确实现代码
直接用Python负索引txt[-1]就能拿到字符串最后一位,不需要手动计算长度减1找索引,也能避免手滑打错括号的问题,修复后的完整代码如下:
txt = input("Original string: ") def mitte(input_str): str_len = len(input_str) if str_len % 2 == 0: mid_idx = str_len // 2 - 1 return input_str[mid_idx] + input_str[mid_idx + 1] else: return input_str[str_len // 2] # 拼接首字符、中间字符、尾字符 res = txt[0] + mitte(txt) + txt[-1] print(res)
代码验证示例:
- 输入
abcde(长度5,奇数):首字符a、中间字符c、尾字符e,输出ace - 输入
abcd(长度4,偶数):首字符a、中间字符bc、尾字符d,输出abcd
注意:日常写代码不要用
str、int、list这类Python内置函数/类型的名字当自定义变量名,从根源上避免覆盖内置逻辑导致的奇怪报错。
内容的提问来源于stack exchange,提问作者schwabbelmadron
相关产品推荐
相关产品推荐

