Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Денис Захаров Знаток (301), на голосовании 1 месяц назад
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)

При проверке типов - вроде как оба выдают одинаковый класс
Может кто подсказать, в чем ошибка, пожалуйста?
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (143745) 2 месяца назад
GPT-4o
Ошибка возникает из-за того, что в вашем коде переменная `i['expiration_date']` может быть `None`, что приводит к невозможности сравнения с объектом типа ` datetime.date `. Вам нужно убедиться, что `i['expiration_date']` действительно является объектом типа ` datetime.date ` перед сравнением. Вот исправленный вариант вашего кода:
 
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`.
Похожие вопросы