UnboundLocalError: local variable 'df' referenced before assignment
Выдаёт данную ошибку 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')
Ответы (1 шт):
Вот возможные причины (что нужно иметь ввиду):
Переменная
dfобъявлена внутри блокаtry/except- в данном случае переменнойdfпросто не будет существовать, если обрабатываемый блок кода выкинет исключение.В смысле глобально? Из данного контекста можно прикинуть что имеется ввиду область до контекстного менеджера, если у вас конечно нет ещё одной
msgна уровне модуля. Переменнаяmsgостанется пустой, т.к. её ничто не будет заполнять.
Небольшой совет по код-стайлу: оставляйте в блоке try ТОЛЬКО тот код, в котором ловится некое исключение, в данном случае возможно одну из 2-х строк можно вынести на строчку выше (зависит от задачи).