You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:36:44