Python为CarRecord类实现__str__特殊方法报返回非字符串错误
代码报错排查:
TypeError: __str__ returned non-string 问题定位 报错核心原因
Python 要求类的特殊方法__str__()必须返回字符串类型,你的代码返回了非字符串对象,直接触发类型错误。
具体错误点
- 返回值结构错误:当前
__str__方法里的return语句用逗号分隔多个值,Python会自动把这组值打包成元组返回,而非拼接后的字符串,完全不符合__str__的返回值要求。 - 类方法内错误引用全局变量:在
__str__方法中直接访问了全局定义的my_car对象,没有用实例方法默认的self参数指代当前实例,逻辑上也不符合类的封装设计——这个方法本该服务于类的所有实例,而非硬绑定某一个全局变量。
修正方案
- 修改
__str__的返回逻辑:通过字符串格式化把属性值拼接为完整字符串,不要用逗号分隔多值 - 方法内统一通过
self访问实例属性,移除对全局my_car变量的引用
修正后可运行代码
class CarRecord: def __init__(self): self.year_made = 0 self.car_vin = '' def __str__(self): return f"Year: {self.year_made}, VIN: {self.car_vin}" my_car = CarRecord() my_car.year_made = int(input()) my_car.car_vin = input() print(my_car)
按题目要求输入2009、ABC321时,可正常输出指定格式内容,无类型报错。
内容的提问来源于stack exchange,提问作者user15344330
相关产品推荐
相关产品推荐

