Answer the question
In order to leave comments, you need to log in
Telegram weather bot question in Python?
How to make it so that when the open weather map does not find the desired city or the user enters some kind of abracadabra, the bot does not crash, but responds with the message 'City not found, try again'?
import pyowm
import telebot
owm=pyowm.OWM('token', language = 'ru')
bot = telebot.TeleBot('token')
@bot.message_handler(content_types=['text'])
def send_echo(message):
observation = owm.weather_at_place(message.text)
w = observation.get_weather()
temp=w.get_temperature('celsius')['temp']
answer = 'В городе ' + message.text + ' сейчас ' + w.get_detailed_status() + '\n'
answer += 'Температура в районе ' + str(round(temp)) + ' градусов' + '\n\n'
if temp<10:
answer += 'Очень холодно, оденься потеплее))'
elif temp<17:
answer += 'Прохладно, лучше оденься:)'
else:
answer += 'Не холодно, хоть в трусах иди:)'
bot.send_message(message.chat.id, answer)
bot.polling(none_stop = True)
Answer the question
In order to leave comments, you need to log in
It is enough to add except ...
import pyowm
import telebot
# от блокировок
# from telebot import apihelper
# apihelper.proxy = {'https':'socks5://127.0.0.1:9050'}
owm=pyowm.OWM('df1....51', language = 'ru')
bot = telebot.TeleBot('106...ilQ')
@bot.message_handler(content_types=['text'])
def send_echo(message):
try:
observation = owm.weather_at_place(message.text)
w = observation.get_weather()
temp=w.get_temperature('celsius')['temp']
answer = f"В городе {message.text} сейчас {w.get_detailed_status()} \n"
answer += f"Температура в районе {round(temp)} градусов\n\n"
if temp<10:
answer += 'Очень холодно, оденься потеплее))'
elif temp<17:
answer += 'Прохладно, лучше оденься:)'
else:
answer += 'Не холодно, хоть в трусах иди:)'
bot.send_message(message.chat.id, answer)
except pyowm.exceptions.api_response_error.NotFoundError:
bot.send_message(message.chat.id, 'Город не найден :(')
bot.polling(none_stop = True)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question