UnboundLocalError: local variable 'df' referenced before assignment

Рейтинг: 0Ответов: 1Опубликовано: 04.04.2023

Выдаёт данную ошибку UnboundLocalError: local variable 'df' referenced before assignment. Понимаю, с чем она связна, смотрел документацию Питона и гуглил ответы. однако, всё равно не могу понять как устранить. Аналогичная функция парсит другой тг канал и всё работает отлично, а тут выкидывает это исключение. С чем может быть связано? Если объявлять глобально эту переменную, то на выходе получаю пустой файл, то есть не работает асинхронный цикл и не записывает ничего. Как исправить?

async def leaks(message: types.Message):

    msg = []

    async with TelegramClient('session', api_id, api_hash) as client:
        all_message = client.iter_messages('ссылка на тг канал', reverse=True, offset_date=date)
        async for message in all_message:
            try:
                msg.append(message.message)
                df = pd.DataFrame({'Содержание публикации': [title for title in msg]})
            except Exception:
                pass
    
        df.to_excel('./eaks.xlsx')

        await client.send_file('me', 'leaks.xlsx')

Ответы

▲ 0

Вот возможные причины (что нужно иметь ввиду):

  1. Переменная df объявлена внутри блока try/except - в данном случае переменной df просто не будет существовать, если обрабатываемый блок кода выкинет исключение.

  2. В смысле глобально? Из данного контекста можно прикинуть что имеется ввиду область до контекстного менеджера, если у вас конечно нет ещё одной msg на уровне модуля. Переменная msg останется пустой, т.к. её ничто не будет заполнять.

Небольшой совет по код-стайлу: оставляйте в блоке try ТОЛЬКО тот код, в котором ловится некое исключение, в данном случае возможно одну из 2-х строк можно вынести на строчку выше (зависит от задачи).