Python将Fleet类对象写入txt文件仅输出VIN故障求助
问题原因
- 字典遍历逻辑错误:
fleet是键为VIN字符串、值为Fleet/Truck实例的字典,直接写for obj in fleet遍历得到的是VIN字符串而非车辆实例,此时调用obj.__str__()实际是调用字符串类的内置方法,返回值就是VIN本身,因此最终写入文件的只有VIN内容。 __str__方法存在类型错误:方法内直接将int类型的属性(年份、里程、租赁相关数值等)与字符串拼接,会触发类型错误,就算正确调用到该方法也无法得到完整的8字段拼接结果。- 写入未加换行符:每条记录写入时没有追加换行符
\n,所有内容会默认拼接在同一行。
修复方案
- 先修复
Fleet类的__str__方法,将int类型属性统一转为字符串:
def __str__(self): # 用f-string自动处理类型转换,也可以用str()逐个转换属性 return f"{self.__vin},{self.__type},{self.__year},{self.__odometer},{self.color},{self.__r_miles},{self.__r_days},{self.__rentals}"
- 修复文件写入逻辑,遍历字典的值获取车辆实例,每条记录后加换行符:
with open("updated_fleet.txt", "w") as myfile: # 遍历字典的value拿到车辆实例 for car in fleet.values(): outline = str(car) # 加换行符实现每条记录单独占一行 myfile.write(outline + "\n") # with上下文管理器会自动关闭文件,不需要手动调用myfile.close()
- 额外修复隐含bug:生成待售车辆列表时,原代码误将VIN字符串当做实例调用方法,修改如下:
sell_list = [] for vin in fleet: if fleet[vin].sell_car(yr) == True: sell_list.append(vin)
内容的提问来源于stack exchange,提问作者yungben
相关产品推荐
相关产品推荐

