Не могу написать простецкий телеграмм бота погоды. Ошибка NameError: name 'message' is not defined
Начал изучение три дня назад, по видео урокам на ютубчике, очень понравилось и по старым гайдикам писал телеграмм бота с прогнозом погоды от OpewWeather. Эхо бот работает и прогноз погоды тоже, но к сожалению по отдельности.
import telebot
from telebot import types
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('MY_TOKEN', config_dict)
bot = telebot.TeleBot("MY_TOKEN")
@bot.message_handler(commands=['text'])
def send_welcome(message):
bot.reply_to(message, message.text)
mgr = owm.weather_manager()
status = weather.detailed_status
observation = mgr.weather_at_place(message.text)
observation.weather.detailed_status
weather = mgr.weather_at_place(message.text).weather
temp = weather.temperature('celsius')['temp']
answer ="В городе " + message.text + " сейчас " + status + "\n"
answer += "Температура воздуха равна + {temp}" + "\n\n"
if temp < 5:
answer += "На улице холодно, рекомендуется одеть курту, шапку и теплый свитер."
elif temp < 10:
answer += "На улице прохладно, рекомендуется одеть сезонную куртку и свитер."
elif temp > 15:
answer += "На улице благоприятная погода, но не рекомендуется выходить без кофты."
elif temp > 20:
answer += "На улице жарко, не забудьте одеть головной убор."
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.send_message(message.chat.id, answer)
bot.infinity_polling()
Ковырял почти сутки pyTelegramBotAPI все данные и таблицы, но к сожалению так и не смог прийти к ответу.
answer ="В городе " + message.text + " сейчас " + status + "\n"
NameError: name 'message' is not defined
ошибка выглядит так, но они по сути весь день менялись...
Прошу укажите на ошибку или может где искать ответ, заранее больше спасибо!
Ответы (1 шт):
У вас видимо ошибка в табуляции. В Python блок кода выделяется при помощи табуляции, если это функция, то вся её логика, должна быть на одном уровне табуляции. Вы пытаетесь обратится к переменной message, а она является локальной для функции send_welcome, вне этой функции message не существует.
import telebot
from telebot import types
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('MY_TOKEN', config_dict)
bot = telebot.TeleBot("MY_TOKEN")
@bot.message_handler(commands=['text'])
def send_welcome(message):
bot.reply_to(message, message.text)
mgr = owm.weather_manager()
status = weather.detailed_status
observation = mgr.weather_at_place(message.text)
observation.weather.detailed_status
weather = mgr.weather_at_place(message.text).weather
temp = weather.temperature('celsius')['temp']
answer = f"В городе {message.text} сейчас {status}\n"
answer += f"Температура воздуха равна {temp}\n\n"
if temp < 5:
answer += "На улице холодно, рекомендуется одеть курту, шапку и теплый свитер."
elif temp < 10:
answer += "На улице прохладно, рекомендуется одеть сезонную куртку и свитер."
elif temp > 15:
answer += "На улице благоприятная погода, но не рекомендуется выходить без кофты."
elif temp > 20:
answer += "На улице жарко, не забудьте одеть головной убор."
@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.send_message(message.chat.id, message)
bot.infinity_polling()