+= 不支持的操作数类型:“int”和“datetime.timedelta”

Posted

技术标签:

【中文标题】+= 不支持的操作数类型:“int”和“datetime.timedelta”【英文标题】:Unsupported operand type(s) for +=: 'int' and 'datetime.timedelta' 【发布时间】:2022-01-03 18:28:42 【问题描述】:

这是我得到的错误:

发生异常:TypeError

我已经搜索过其他有类似问题的人,但找不到与我类似的任何东西。我也没有遇到过这个问题。

我要计算总飞行时间

问题出现在这行代码:

def get_total_flight_time(self):

        total_flight_time = 0

        for f in self.flights:

            total_flight_time += f.get_flight_time()


        return total_flight_time

这是我的其余代码供参考

from datetime import datetime

class Flight(object):
    def __init__(self, new_flight_number, new_departure_time, new_arrival_time):
        self.flight_number = None
        self.departure_time = None
        self.arrival_time = None

        self.flight_number = str(new_flight_number)
        self.departure_time = new_departure_time
        self.arrival_time = new_arrival_time

    def get_flight_number(self):
        return self.flight_number

    def get_departure_time(self):
        return self.departure_time
    def set_departure_time(self, new_departure_time):
        self.departure_time = new_departure_time

    def get_arrival_time(self):
        return self.arrival_time
    def set_arrival_time(self, new_arrival_time):
        self.arrival_time = new_arrival_time

    def get_flight_time(self):
        return (self.arrival_time - self.departure_time )

class Itinerary(object):
    def __init__(self, new_flights):
        self.flights = None

        self.flights = new_flights
        
    def get_total_travel_time(self):
        total_travel_time = 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

    def get_total_flight_time(self):

        total_flight_time = 0

        for f in self.flights:

            total_flight_time += f.get_flight_time()


        return total_flight_time


def main():

    flights = []

    flights.append(
        Flight("US230", datetime(2014, 4, 5, 5, 5, 0), 
                        datetime(2014, 4, 5, 6, 15, 0))
    )

    flights.append(
        Flight("US235", datetime(2014, 4, 5, 6, 55, 0), 
                        datetime(2014, 4, 5, 7, 45, 0))
    )

    flights.append(
        Flight("US237", datetime(2014, 4, 5, 9, 35, 0), 
                        datetime(2014, 4, 5, 12, 55, 0))
    )

    itinerary = Itinerary(flights)

    print("Total Travel time: ", itinerary.get_total_travel_time())

    print("Total Flight time: ", itinerary.get_total_flight_time())

main()

【问题讨论】:

嗯,get_flight_time 返回两个日期时间之间的差异,这是一个 timedelta 实例。但是,您的 total_flight_time 最初设置为 0,即 int。您不能添加不同的类型。 一种解决方案是将total_flight_time也设置为timedelta对象;默认情况下,它将是零天/秒/年/任何东西。见docs.python.org/3/library/datetime.html#datetime.timedelta。例如,from datetime import timedelta; total_flight_time = timedelta() 我在函数 get_total_flight_time 中将 total_flight_time = 0 更改为 total_flight_time = timedelta(seconds=0) 并且它起作用了 @CarlosAdir seconds=0 部分甚至不需要;这是默认设置。 谢谢你们! 【参考方案1】:

欢迎来到 ***!

这个异常背后的原因是因为total_flight_time (int) 和f.get_flight_time() (返回一个timedelta) 是两种不同的类型,Python 不知道如何将+ 操作数应用于它们。为了解决这个问题,您需要在添加它们之前确保它们是相同的类型,即intdatetime.timedelta。似乎您需要将数字作为timedelta 对象,因此要创建一个值为 0 的对象,请使用timedelta(seconds=0),并将此值分配给total_flight_time。如果您只想使用int,您可以使用int(f.get_flight_time().total_seconds()),然后如果您需要将其转换为时间增量,您可以使用timedelta(seconds=)

【讨论】:

以上是关于+= 不支持的操作数类型:“int”和“datetime.timedelta”的主要内容,如果未能解决你的问题,请参考以下文章

Keras 报告类型错误:+ 的不支持的操作数类型:'NoneType' 和 'int'

TypeError: %: 'list' 和 'int' 不支持的操作数类型 |很有趣的案例?

TypeError: *: 'int' 和 'NoneType' 不支持的操作数类型

TypeError: 不支持的操作数类型 -: 'int' 和 'list'

Python TypeError:^:'float'和'int'不支持的操作数类型

求和函数概率类型错误:+ 不支持的操作数类型:“int”和“str”