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

Python中TypeError: 'str' object is not callable错误排查与解决

解决TypeError: 'str' object is not callable并实现TreasureChest类功能

错误原因分析

这个报错的核心原因是你在代码中把某个函数名当成字符串变量赋值了,之后尝试调用这个"函数"时,实际调用的是字符串,自然会触发TypeError。比如如果出现过类似readData = "treasure_data.txt"这样的代码,之后再执行readData()就会报错。

完整实现代码

下面是符合需求的代码,包含私有属性、文件读取、异常处理,同时避免了命名冲突:

class TreasureChest:
    def __init__(self, question, answer, points):
        # 定义私有属性
        self.__question = question
        self.__answer = answer
        self.__points = points

    # 可选:添加获取私有属性的方法(如果需要外部访问)
    def get_question(self):
        return self.__question

    def get_answer(self):
        return self.__answer

    def get_points(self):
        return self.__points

def read_treasure_data(file_path):
    arrayTreasure = []
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            for line in file:
                # 分割每行数据,假设数据用逗号分隔(可根据实际分隔符调整)
                parts = line.strip().split(',')
                if len(parts) != 3:
                    print(f"无效数据行:{line},跳过")
                    continue
                # 转换数据类型
                question = parts[0].strip()
                try:
                    answer = int(parts[1].strip())
                    points = int(parts[2].strip())
                except ValueError:
                    print(f"数据类型错误:{line},跳过")
                    continue
                # 创建TreasureChest对象并加入数组
                chest = TreasureChest(question, answer, points)
                arrayTreasure.append(chest)
    except FileNotFoundError:
        print(f"错误:未找到文件 {file_path}")
    return arrayTreasure

# 调用示例
if __name__ == "__main__":
    treasure_list = read_treasure_data("TreasureChestData.txt")
    # 验证结果
    for chest in treasure_list:
        print(f"问题:{chest.get_question()},答案:{chest.get_answer()},分值:{chest.get_points()}")

关键注意事项

  • 避免命名冲突:不要将函数名(比如read_treasure_data)和变量名重名,这是触发你报错的核心原因。比如不要写read_treasure_data = "some string"再去调用read_treasure_data()。
  • 文件格式兼容:假设文件每行数据用逗号分隔,比如"什么是Python的官方解释器?",1,10,如果你的文件用其他分隔符(比如空格、制表符),需要修改split()的参数。
  • 数据类型校验:添加了ValueError捕获,防止文件中答案或分值不是整数的情况。
  • 私有属性访问:Python中私有属性是通过名称修饰实现的,外部无法直接访问__question,所以提供了get_*方法来获取属性值(如果不需要外部访问可以省略)。

内容的提问来源于stack exchange,提问作者Ayush Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:01:02