Top.Mail.Ru
Ответы

TypeError: '<=' not supported between instances of 'NoneType' and 'datetime.date'

def expire(items, in_advance_days=0):
total = 0
expire_goods = []
today = dt.date.today ()
days = today + dt.timedelta(days = in_advance_days)
for names, value in dict.items(items):
for i in value:
if names not in expire_goods and i['expiration_date'] <= days:
total +=i['amount']
list.append(expire_goods, (names, total))
print(expire_goods)

При проверке типов - вроде как оба выдают одинаковый класс
Может кто подсказать, в чем ошибка, пожалуйста?

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
11мес

GPT-4o

Ошибка возникает из-за того, что в вашем коде переменная `i['expiration_date']` может быть `None`, что приводит к невозможности сравнения с объектом типа ` datetime.date `. Вам нужно убедиться, что `i['expiration_date']` действительно является объектом типа ` datetime.date ` перед сравнением. Вот исправленный вариант вашего кода:

12345678910111213141516171819202122232425262728
 
import datetime as dt 
 
def expire(items, in_advance_days=0):  
    total = 0  
    expire_goods = []  
    today = dt.date.today()  
    days = today + dt.timedelta(days=in_advance_days)  
     
    for names, value in items.items():  # Используйте items.items() для итерации по словарю 
        for i in value:  
            expiration_date = i.get('expiration_date') 
            if expiration_date is not None and isinstance(expiration_date, dt.date): 
                if names not in expire_goods and expiration_date <= days:  
                    total += i['amount']  
                    expire_goods.append((names, total)) 
     
    print(expire_goods) 
 
# Пример использования 
items = { 
    'milk': [{'expiration_date': dt.date(2023, 10, 5), 'amount': 10}], 
    'bread': [{'expiration_date': dt.date(2023, 10, 8), 'amount': 5}], 
    'cheese': [{'expiration_date': None, 'amount': 2}]  # Пример с None 
} 
 
expire(items) 
 



Изменения:
1. Проверка `expiration_date` на `None` и на тип ` datetime.date ` перед сравнением.
2. Использование `items.items()` для итерации по словарю.
3. Убедитесь, что в вашем словаре `items` даты действительно являются объектами типа ` datetime.date `.

Теперь код должен работать корректно и избегать ошибки типа `TypeError`.