Помогите, срочно!!! Неправильно работает except

Вместо того, чтобы отправить прогноз погоды, он выдаёт вот это... Надеюсь на вашу помощь

Вот такая проблема...

@bot.message_handler(commands=['weather'])
def send_message(message):
    if message.text == '/weather@PPTlo_bot' or '/weather':
        bot.send_message(message.chat.id, 'Введите город/страну:')
        bot.message_handler(content_types=['text'])
        try:
            mgr = owm.weather_manager()
            observation = mgr.weather_at_place( message.text )
            w = observation.weather 
            wind = w.wind()
            temp = w.temperature('celsius')["temp"]
            humidity = w.humidity 
            heat_index = w.heat_index
            clouds = w.clouds
            three_h_forecaster = mgr.forecast_at_place(message.text, '3h')
            tomorrow_at_five = timestamps.tomorrow(17, 0)                   
            weather = three_h_forecaster.get_weather_at( tomorrow_at_five )
            three_h_forecaster = mgr.forecast_at_place(message.text, '3h')
            three_h_forecaster.will_have_snow()    
            three_h_forecaster.will_have_rain()
            weather = observation.weather


            answer = 'В городе ' + message.text + ' сейчас ' + w.detailed_status + '\n'
            answer += 'Температура в районе'  + ' - ' + str(temp) + ' °C' + '\n'
            answer += "Скорость ветра: " +  str(wind['speed']) +  " м/с"
            if wind['deg'] == 0:
                answer += " (С)"
            elif wind['deg'] == 90:
                answer += " (В)" + "\n"
            elif wind['deg'] == 180:
                answer += " (Ю)" + "\n"
            elif wind['deg'] == 270:
                answer += " (З)" + "\n"
            elif wind['deg'] < 90:
                answer += " (СВ)" + "\n"
            elif wind['deg'] < 180:
                answer += " (ЮВ)" + "\n"
            elif wind['deg'] < 270:
                answer += " (ЮЗ)" + "\n"
            else:
                answer += " (СЗ)" + "\n"

            answer += "Влажность: " +   str(humidity)  + " %" + "\n"
            answer += "Процент облаков в небе: " + str(clouds) + " %" 

            print("Пользователь ввёл город " + message.text)

            markup = types.InlineKeyboardMarkup(row_width=1)
            item1 = types.InlineKeyboardButton("Узнать подробный прогноз", callback_data='forecast')
            item2 = types.InlineKeyboardButton("Меню", callback_data='menu')
            item3 = types.InlineKeyboardButton("Включить оповещение", callback_data='alert')
            markup.add( item1, item2, item3, )

            bot.send_message(message.chat.id, answer, reply_markup=markup)
        except:
            bot.send_message(message.chat.id, 'Я ещё не знаю такого города :(')

Ответы (1 шт):

Автор решения: oleksandrigo

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

@bot.message_handler(commands=['weather'])
def send_message(message):
    if message.text == '/weather@PPTlo_bot' or '/weather':
        bot.send_message(message.chat.id, 'Введите город/страну:')
        bot.register_next_step_handler(message, input_weather)


def input_weather(message):
    try:
        mgr = owm.weather_manager()
        observation = mgr.weather_at_place(message.text)
        w = observation.weather
        wind = w.wind()
        temp = w.temperature('celsius')["temp"]
        humidity = w.humidity
        heat_index = w.heat_index
        clouds = w.clouds
        three_h_forecaster = mgr.forecast_at_place(message.text, '3h')
        tomorrow_at_five = timestamps.tomorrow(17, 0)
        weather = three_h_forecaster.get_weather_at(tomorrow_at_five)
        three_h_forecaster = mgr.forecast_at_place(message.text, '3h')
        three_h_forecaster.will_have_snow()
        three_h_forecaster.will_have_rain()
        weather = observation.weather

        answer = 'В городе ' + message.text + ' сейчас ' + w.detailed_status + '\n'
        answer += 'Температура в районе' + ' - ' + str(temp) + ' °C' + '\n'
        answer += "Скорость ветра: " + str(wind['speed']) + " м/с"
        dict_angle = {
            0: '(С)',
            90: '(В)',
            180: '(Ю)',
            270: '(P)',
            range(1, 90): '(СВ)',
            range(91, 180): '(ЮВ)',
            range(181, 270): '(ЗЮ)',
            range(271, 360): '(СЗ)'
        }
        for i in dict_angle:
            if type(i) == int:
                if wind['deg'] == i:
                    answer += f"{dict_angle[i]}\n"
                    break
            elif wind['deg'] in i:
                answer += f"{dict_angle[i]}\n"
                break

        answer += "Влажность: " + str(humidity) + " %" + "\n"
        answer += "Процент облаков в небе: " + str(clouds) + " %"

        print("Пользователь ввёл город " + message.text)

        markup = types.InlineKeyboardMarkup(row_width=1)
        item1 = types.InlineKeyboardButton("Узнать подробный прогноз", callback_data='forecast')
        item2 = types.InlineKeyboardButton("Меню", callback_data='menu')
        item3 = types.InlineKeyboardButton("Включить оповещение", callback_data='alert')
        markup.add(item1, item2, item3)

        bot.send_message(message.chat.id, answer, reply_markup=markup)
    except:
        bot.send_message(message.chat.id, 'Я ещё не знаю такого города :(')
→ Ссылка