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`.
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)
При проверке типов - вроде как оба выдают одинаковый класс
Может кто подсказать, в чем ошибка, пожалуйста?