@CharonIKHH

Ошибка Импорта — cannot import name 'executor' from 'aiogram.utils', как чинить?

Пишу бота для телеграм, который будет отслеживать самые волатильные криптовалютные пары на бирже Bybit.
Проблема заключается в том, что при импорте библиотек появляется ошибка из заголовка вопроса.

Версии
Python - 3.12.2
AIOGRAM - 3.7.0
REQUESTS - 2.32.3
MATHPLOTLIB - 3.9.0
aiohttp - 3.9.5

Полная ошибка

Traceback (most recent call last):
  File "c:\Users\OtterAndFinek\Desktop\ByBitCheckerBot\ByBitCheckerBot\bot.py", line 2, in <module>
    from aiogram.utils import executor
ImportError: cannot import name 'executor' from 'aiogram.utils' (C:\Users\OtterAndFinek\Desktop\ByBitCheckerBot\.venv\Lib\site-packages\aiogram\utils\__init__.py)


Код

from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from config import TELEGRAM_API_TOKEN, TELEGRAM_CHANNEL_ID
from bybit_api import get_tickers, get_volatility
from chart import create_chart
import io

bot = Bot(token=TELEGRAM_API_TOKEN)
dp = Dispatcher(bot)

# Словарь для хранения последних цен для каждой пары
last_prices = {}

async def send_volatility_alert():
    tickers = get_tickers()
    volatile_pairs = get_volatility(tickers)

    for pair in volatile_pairs:
        symbol = pair['symbol']
        price_change = pair['priceChangePercent']
        current_price = float(pair['lastPrice'])
        message = f' {symbol} изменился на {price_change:.2f}%'

        # Инициализация последней цены, если еще нет данных
        if symbol not in last_prices:
            last_prices[symbol] = []

        # Добавление текущей цены в список последних цен
        last_prices[symbol].append(current_price)

        # Ограничение длины списка последних цен
        if len(last_prices[symbol]) > 50:
            last_prices[symbol] = last_prices[symbol][-50:]

        # Генерация графика
        timestamps = list(range(len(last_prices[symbol])))  
        chart = create_chart(timestamps, last_prices[symbol], symbol)

        # Отправка сообщения и графика
        await bot.send_message(TELEGRAM_CHANNEL_ID, message)
        await bot.send_photo(TELEGRAM_CHANNEL_ID, photo=chart)

async def on_startup(dp):
    await send_volatility_alert()

if __name__ == '__main__':
    executor.start_polling(dp, on_startup=on_startup)
  • Вопрос задан
  • 2858 просмотров
Решения вопроса 1
Wispik
@Wispik

The Executor has been entirely removed; you can now use the Dispatcher directly to start poll the API or handle webhooks from it.

https://docs.aiogram.dev/en/latest/migration_2_to...
В aiogram 3 удалили executor, вместо него надо использовать dispatcher
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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