Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Telebot python ошибка в telebot.TeleBot

afdwqarfwq efqwefeq23 Ученик (117), на голосовании 1 месяц назад
 import telebot 
import requests
import json
def get_country(code):
return countries.get(code.upper())

bot = telebot.TeleBot(тут токен)
API = "5bd52697213a9c81196e8fd4063fa37c"

@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, 'Напиши название города')

@bot.message_handler(content_types=['text'])
def get_weather(message):
city = message.text.strip().lower()
res = requests.get(f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API}&units=metric')
if res.status_code == 200:
data = json.loads(res.text)
country = data['sys']['country']
bot.reply_to(message, f'Погода в {city} сейчас \n Температура - {data["main"]["temp"]}°C ощущается как {data['main']['feels_like']}°C \n Скорость ветра - {data["wind"]["speed"]} м/с \n Облачность - {data['clouds']['all']}% \n Страна - {get_country(country)}')
else:
bot.reply_to(message, f'Ошибка - город {city} не существует')
print(message.chat.id)
bot.infinity_polling()
выдает ошибку в 7 строке я не понимаю что там может быть не так
на то что при создании функции get_country я ссылаюсь на несуществующий список то так и должно быть там список на 240+ строк так что я не хочу засорять им место
     bot = telebot.TeleBot(Тут токен) 
^^^^^^^^^^^^^^^
AttributeError: partially initialized module 'telebot' has no attribute 'TeleBot' (most likely due to a circular import). Did you mean: 'telebot'?
код еще пару часов назад работал а теперь без никаких изменений отказывается работать
Дополнен 2 месяца назад
проблема решена божьей силой я не знаю как это по другом назвать?
я ничего не поменял но код начал работать
Голосование за лучший ответ
HЛО Мыслитель (5143) 2 месяца назад
bot = telebot.TeleBot(API)
afdwqarfwq efqwefeq23Ученик (117) 2 месяца назад
API там это вообще нужно для обращения к сайту а не боту токен у меня есть просто тут я его скрыл так как он дает полный доступ к боту
и починилось оно кстати не пойми как
я просто отошел заварить чай, еще раз попробовал включить и оно начало работать без каких либо изменений
Помощник PYTHON Профи (607) afdwqarfwq efqwefeq23, Может твой основной файл назывался также, как и модуль?
sss sss Мастер (2183) 2 месяца назад
Проблема возникает из-за попытки доступа к TeleBotатрибутам объекта до того, как он будет полностью инициализирован. Вероятно, это происходит из-за непонимания того, как TeleBotработает конструктор.

Вот описание проблемы и возможное решение:

Проблема:

Строка bot = TeleBot("Тут токен")инициализирует TeleBotобъект.
Попытка использовать botнепосредственно после этого для доступа к его методам или атрибутам (например get_country) слишком ранняя. Процесс инициализации для TeleBotможет все еще продолжаться.
Решение:

Сначала выполните инициализацию TeleBot, затем определите функции. Правильный порядок — создать экземпляр TeleBot, а затем определить функции, которые его используют.
Использование botвнутри функций: при вызове функций, например, get_countryвнутри функций, обрабатывающих сообщения (например, @bot.message_handler(content_types=['text'])), убедитесь, что вы botправильно ссылаетесь на объект.
Пример:
 import telebot 
import requests
import json

API = "5bd52697213a9c81196e8fd4063fa37c"
bot = telebot.TeleBot(API) # Initialize TeleBot first

# Define functions that use the bot object
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Напиши название города")

@bot.message_handler(content_types=['text'])
def get_weather(message):
city = message.text.strip().lower()
res = requests.get(f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=API_KEY")
if res.status_code == 200:
data = json.loads(res.text)
country = data['sys']['country']
bot.reply_to(message, f"Погода в {city} сейчас \nТемпература - {data['main']['temp']}")
else:
bot.reply_to(message, f"Ошибка - город {city} не существует")

bot.infinity_polling()
Объяснение:

Инициализация: Сначала выполняется строка bot = telebot.TeleBot(API), настраивающая botобъект.
Определение функции: Далее мы определяем функции startи get_weather.
Использование функций: Внутри этих функций botобъект используется корректно для взаимодействия с API Telegram.
Соблюдая этот порядок, вы сможете избежать ошибок AttributeErrorи обеспечить корректную работу вашего Telegram-бота.
Помощник PYTHON Профи (607) 2 месяца назад
К сожалению, я не могу выполнить код напрямую здесь. Однако, ошибка, которую вы получаете, связана с круговым импортом модуля telebot. Попробуйте переименовать переменную bot или попробовать импортировать telebot внутри функции start и get_weather. Это может помочь избежать проблемы с круговым импортом. Надеюсь, это поможет вам решить проблему! Если у вас возникнут другие вопросы, не стесняйтесь обращаться.
Похожие вопросы