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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:45:05