@IlyaBotik

Почему бот не работает?

import pyowm
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
import telebot

while True:
    try:
         do_something_erronous()
         config_dict = get_default_config()
         config_dict['language'] = 'ru'
         owm = OWM('my api', config_dict)

         owm = pyowm.OWM('my api')
         mgr = owm.weather_manager()

         bot = telebot.TeleBot("Token")
 
         @bot.message_handler(content_types=['text'])
         def send_echo(message):
    
             observation = mgr.weather_at_place( message.text )
    

             w = observation.weather
             temp = w.temperature('celsius')["temp"]

             answer = answer = f"В городе {message.text} сейчас {w.detailed_status}\n"
             answer += " Температура сейчас в районе "+ str(temp) + "\n\n"


             if temp < 5:
                 answer += "Сейчас ОЧЕНЬ ХОЛОДНО!"
             elif temp < 10:
                 answer += "Сейчас холодно, одевайся!"
             elif temp < 20:
                 answer += "Температура средняя,оденься потеплее!"
             else:
                 answer += "Температура нормальная, одевайcя как хочешь!"

             bot.send_message(message.chat.id, answer)
         bot.polling(none_stop=True)
    except :
         pass
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 1
@o5a
Не понятно, зачем бесконечный цикл. Если цель - обработать исключения, лучше делать это для отдельных блоков. Запрос погоды лучше вынести в отдельную функцию, там же обработать исключение на случай проблем с API погоды или неправильного города. Повторяющиеся создания owm удалил. Так должно работать.

from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
import telebot

TOKEN = токен телеграм
OWM_KEY = API ключ OWM

config_dict = get_default_config()
config_dict['language'] = 'ru'

bot = telebot.TeleBot(TOKEN)

def get_weather(location):
    try:
        owm = OWM(OWM_KEY, config_dict)
        mgr = owm.weather_manager()
        observation = mgr.weather_at_place(location)
        w = observation.weather
        temp = w.temperature('celsius')["temp"]

        answer = answer = f"В городе {location} сейчас {w.detailed_status}\n"
        answer += " Температура сейчас в районе "+ str(temp) + "\n\n"

        if temp < 5:
            answer += "Сейчас ОЧЕНЬ ХОЛОДНО!"
        elif temp < 10:
            answer += "Сейчас холодно, одевайся!"
        elif temp < 20:
            answer += "Температура средняя,оденься потеплее!"
        else:
            answer += "Температура нормальная, одевайcя как хочешь!"
    except Exception as e:
        print('Error:', e)
        answer = 'Ошибка такая-то' # или любой другой, на случай неправильного города

    return answer

# что под функцией с ошибкой подразумевалось не понятно, но допустим так
def do_something_erronous():
    1/0

@bot.message_handler(content_types=['text'])
def send_echo(message):
    # логику работы с OWM переносим в отдельную функцию

    # запрашиваем текст о погоде в указанном городе
    answer = get_weather(message.text)

    bot.send_message(message.chat.id, answer)

# что осталось от изначального блока исключений, если он Вам еще зачем-то нужен
try:
    do_something_erronous()
except Exception as e:
    print('Error:', e)

bot.polling(none_stop=True)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы