Django - UnboundLocalError: локальная переменная 'image_link' ссылается перед присвоением

Я написал функцию для разбора ленты новостных статей.

def save_new_articles(feed, source_id, category_id):
    channel_feed_title = feed.channel.title.title()
    channel_feed_link = feed.channel.link
    channel_feed_desc = feed.channel.description
    official_source_id = source_id
    post_category_id = category_id

    for item in feed.entries:
        parsed_summary = item.summary
        soup = BeautifulSoup(parsed_summary, 'lxml')
        images = soup.findAll('img')
        for image in images:
            image_url_link = (image['src'])
            if image_url_link is not None:
                image_link = image_url_link
            else:
                image_link = "https://www.publicdomainpictures.net/pictures/280000/velka/not-found-image-15383864787lu.jpg"

        parsed_title = item.title
        formatted = re.sub("<.*?>", "", parsed_title)
        post_title = formatted

        post_link = item.link

        description = item.description
        output_summary = re.sub("<.*?>", "", description)

        title = item.title
        capital = title.title()
        tags = capital.split()

        date_published = parser.parse(item.published)

        if not Posts.objects.filter(guid=item.guid).exists():
            post = Posts(
                title = post_title,
                link = post_link,
                summary = output_summary,
                image_url = image_link,
                tags = tags,
                pub_date = date_published,
                guid = item.guid,
                feed_title = channel_feed_title,
                feed_link = channel_feed_link,
                feed_description = channel_feed_desc,
                source_id = official_source_id,
                category_id = post_category_id
            )
            post.save()
            
        else:
            logger.info("Duplicate Post Detected! Skipping...")

Но после выполнения кода я получаю:

image_url = image_link,
UnboundLocalError: local variable 'image_link' referenced before assignment

Я не понимаю, откуда берется ошибка, поскольку я определил image_link в image for loop statement выше. Я проверил похожие ответы на SO, но, похоже, не нашел подходящего ответа. Пожалуйста, помогите мне отладить это.

Эта ошибка возникает, когда images (которые вы инициализируете с помощью soup.findAll('img')) пусты.

Возможно, у вас не только item.summary без тегов img, но и просто пусто из-за какой-то предыдущей ошибки.

Таким образом, чтобы исправить ваш код, вы должны просто инициализировать image_link перед этим:

if not Posts.objects.filter(guid=item.guid).exists():

с вашим, как я предполагаю, значением по умолчанию:

image_link = "https://www.publicdomainpictures.net/pictures/280000/velka/not-found-image-15383864787lu.jpg"

Например, вот так, вместо:

        for image in images:
            image_url_link = (image['src'])
            if image_url_link is not None:
                image_link = image_url_link
            else:
                image_link = "https://www.publicdomainpictures.net/pictures/280000/velka/not-found-image-15383864787lu.jpg"

вы можете пойти этим путем:

        image_link = "https://www.publicdomainpictures.net/pictures/280000/velka/not-found-image-15383864787lu.jpg"
        for image in images:
            image_url_link = (image['src'])
            if image_url_link is not None:
                image_link = image_url_link
Вернуться на верх