Python计算航班总飞行时长报错unsupported operand type(s) for +=: 'int'和'datetime.timedelta'
报错原因
你触发类型错误的核心原因是:get_flight_time() 方法返回的是两个datetime对象相减得到的datetime.timedelta时间差类型,但你初始化total_flight_time用的是整数0,Python不支持整数和timedelta类型直接做加法运算。
另外get_total_travel_time方法也存在隐藏问题:如果行程没有航班,你会返回整数0,和有航班时返回的timedelta类型不一致,后续调用也可能触发类型错误。
修改方案
- 首先在导入部分补充引入
timedelta类型 - 将两个计算时长方法的初始值,从整数
0改为timedelta(0)(代表时间差类型的零值)
具体修改的代码片段
导入部分修改:
from datetime import datetime, timedelta
get_total_flight_time方法修改:
def get_total_flight_time(self): # 初始值改为timedelta类型的零值 total_flight_time = timedelta(0) for f in self.flights: total_flight_time += f.get_flight_time() return total_flight_time
get_total_travel_time方法修改:
def get_total_travel_time(self): # 初始值改为timedelta类型的零值 total_travel_time = timedelta(0) if len(self.flights) > 0: first_flight_departure = self.flights[0].get_departure_time() last_flight_arrival = self.flights[len(self.flights) - 1].get_arrival_time() total_travel_time = (last_flight_arrival - first_flight_departure ) return total_travel_time
运行结果
修改后执行代码会输出正确结果:
Total Travel time: 7:50:00 Total Flight time: 5:20:00
内容的提问来源于stack exchange,提问作者steeplearningcurve
相关产品推荐
相关产品推荐

