Не понятно, зачем бесконечный цикл. Если цель - обработать исключения, лучше делать это для отдельных блоков. Запрос погоды лучше вынести в отдельную функцию, там же обработать исключение на случай проблем с 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)