Задать вопрос
@andrey13879

Почему выдает ошибку?

До добавления функции 'filter_bad_items' все работало изумительно
class ItemService:
    def enrich_with_data(self, session: requests.Session, items: list[Item]) -> list[Item]:
        for item in items:
            response = self.repository.get_additional_data(session, item)
            item_info = response.json()['iteminfo']
            item.full_item_name = item_info['full_item_name']
            #print(item.full_item_name)

        return items, item.full_item_name

    def filter_bad_items(self,full_item_name, items: list[Item]) -> list[Item]:
        print(full_item_name + '1234123')
        if full_item_name in ['XM1014 | Seasons (Factory New)']:
            return [item for item in items if (item.floatvalue in config.GOOD_FLOAT_VALUES2)]
        elif full_item_name in ['Glock-18 | High Beam (Factory New)']:
            return [item for item in items if (item.floatvalue in config.GOOD_FLOAT_VALUES1)]


items, full_item_name = item_service.enrich_with_data(session, items)
    print(full_item_name)
    items = item_service.filter_bad_items(full_item_name,items)


Код ошибки:
!!   File "C:\Users\User\Desktop\PATERN\app\main.py", line 42, in perform_item_instances_check
    items, full_item_name = item_service.enrich_with_data(session, items)
!!   File "C:\Users\User\Desktop\PATERN\app\services.py", line 85, in enrich_with_data
    return items, item.full_item_name
!! UnboundLocalError: local variable 'item' referenced before assignment
  • Вопрос задан
  • 150 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 2
@dima20155
you don't choose c++. It chooses you
Так, ты поправил вопрос, а я поправлю ответ.

Ошибка в том, что ты возвращаешь item в этой функции, но локальная переменная item существует только внутри цикла (а возвращаешь ты после выхода из него)
Решение - создай переменную перед циклом и в неё запиши что тебе необходимо и возвращай её.
def enrich_with_data(self, session: requests.Session, items: list[Item]) -> list[Item]:
        for item in items:
            response = self.repository.get_additional_data(session, item)
            item_info = response.json()['iteminfo']
            item.full_item_name = item_info['full_item_name']
            #print(item.full_item_name)

        return items, item.full_item_name
Ответ написан
Комментировать
Wispik
@Wispik
class ItemService:
    def enrich_with_data(self, session: requests.Session, items: list[Item]) -> list[Item]:
        for item in items:
            response = self.repository.get_additional_data(session, item)
            item_info = response.json()['iteminfo']
            item.full_item_name = item_info['full_item_name']
            #print(item.full_item_name)

        return items, item.full_item_name

в return item.full_item_name, что за переменная item? она доступна только в цикле, поэтому и ошибка
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
scriptcat5
@scriptcat5
Младенец в Python
items: list[Item]) -> list[Item]:

Попробуйте без -> list[Item]
Ответ написан
@andrey13879 Автор вопроса
Перепробовал все решения из предложенных, но ни одно не сработало, тогда я просто объединил эти две функции в одну и все заработало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы