Python出现'int'和'str'不支持减运算符TypeError问题排查
问题排查结果
核心错误原因
1. 类实例化参数顺序错误
你的Fleet类构造方法参数顺序为:def __init__(self, vin, typ, year, color, odometer, r_miles = 0, r_days = 0, rentals = 0 )
而你从fleet.txt读取字段的顺序为v, ty, y, o, c, rm, rd, r,其中o是里程数、c是颜色,传参时你写为:
# 错误写法 fleet[v] = Fleet(v, ty, int(y), int(o), c, int(rm), int(rd), int(r))
这里把第4位的color参数传成了数字类型的里程数,第5位的odometer参数传成了字符串类型的颜色,这就是self.__odometer为字符串的根本原因。
修改方案:调整传参顺序,把颜色和里程数的位置互换:
# 修正后 if ty == "C": fleet[v] = Fleet(v, ty, int(y), c, int(o), int(rm), int(rd), int(r)) else: fleet[v] = Truck(v, ty, int(y), c, int(o), int(rm), int(rd), int(r))
2. 字典遍历逻辑错误
你定义的fleet是字典类型,键为VIN字符串,值为车辆实例。直接写for obj in fleet遍历的是字典的键(字符串),不是车辆实例,后续调用实例方法会直接报错。
修改方案:两处遍历fleet的代码都改为遍历字典的values():
# 筛选待售车辆部分 sell_list = [] for obj in fleet.values(): if obj.sell_car(yr) == True: sell_list.append(obj.get_vin())
# 写入文件部分 with open("updated_fleet.txt", "w") as myfile: for obj in fleet.values(): outline = obj.__str__() myfile.write(outline)
3. __str__方法未做类型转换
你在__str__方法中直接将int类型的年份、里程数等属性和字符串拼接,会触发类型错误,需要将数字属性转换为字符串类型:
def __str__(self): return self.__vin + "," + self.__type + "," + str(self.__year) + "," + str(self.__odometer) + "," + self.color + "," + str(self.__r_miles) + "," + str(self.__r_days) + "," + str(self.__rentals)
其他优化点
使用with关键字操作文件时,上下文管理器会自动关闭文件,不需要手动调用myfile.close(),可以删除该行代码。
内容的提问来源于stack exchange,提问作者yungben
相关产品推荐
相关产品推荐

