Помогите, срочно!!! Неправильно работает 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, 'Я ещё не знаю такого города :(')
