Unsupported operand type(s) for +=: 'int' and 'datetime.timedelta'

Question:

This is the error im getting:

Exception has occurred: TypeError
unsupported operand type(s) for +=: ‘int’ and ‘datetime.timedelta’

I have searched for other people with similiar problems, but couldn’t quite find anything to similiar to mine. I havent gotten this problem before either.

I want to calculate the total flight time

The problem occurs in this line of code:

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

Here is the rest of my code for reference

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()
Asked By: steeplearningcurve

||

Answers:

The reason behind this exception is since total_flight_time (int) and f.get_flight_time() (returns a timedelta) are two different types, Python does not know how to apply the + operand to them. In order to resolve this, you’ll want to make sure they are the same type before you add them, namely, either int or datetime.timedelta. It seems like you need the number to be a timedelta object, so in order to create one with a value of 0, use timedelta(seconds=0), and assign this value to total_flight_time. If you just want to use int, you can use int(f.get_flight_time().total_seconds()) and then later if you need to convert that into a timedelta, you can do so with timedelta(seconds=< total seconds >)

Answered By: benjixinator