Проверка ответа

Как сделать так, чтобы бот не ломался после неверного ответа, а выдавал на подобии: Такого города нет! Пробовал через условие, но что-то не получилось у меня. Ошибка:

Traceback (mostrecent call last):
  File "C:\Python\Bottelega.py", line 27, in <module>
    bot.polling( none_stop = True)
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\telebot\__init__.py", line 480, in polling
    self.__threaded_polling(none_stop, interval, timeout, long_polling_timeout)
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\telebot\__init__.py", line 539, in __threaded_polling
    raise e
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\telebot\__init__.py", line 502, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\telebot\util.py", line 117, in raise_exceptions
    raise self.exception_info
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\telebot\util.py", line 69, in run
    task(*args, **kwargs)
  File "C:\Python\Bottelega.py", line 15, in send_echo
    observation = mgr.weather_at_place(message.text)
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\weatherapi25\weather_manager.py", line 53, in weather_at_place
    _, json_data = self.http_client.get_json(OBSERVATION_URI, params=params)
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 143, in get_json
    HttpClient.check_status_code(resp.status_code, resp.text)
  File "C:\Users\dmitr\AppData\Local\Programs\Python\Python39\lib\site-packages\pyowm\commons\http_client.py", line 288, in check_status_code
    raise exceptions.NotFoundError('Unable to find the resource')
pyowm.commons.exceptions.NotFoundError: Unable to find the resource
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
from pyowm.utils.config import get_default_config
config_dict = get_default_config()
config_dict['language']="ru"
import telebot

owm = OWM('xxxxxx', config_dict)
mgr = owm.weather_manager()
bot = telebot.TeleBot("yyyyyyyy")

@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 = "В городе " + message.text + " сейчас " + w.detailed_status + "\n\n"
    answer += "Температура сейчас в районе " + str(temp) + "\n\n"
    if temp <= -20:
        answer += "На улице очень холодно, одевай шубу!!"
    elif temp < -10:
        answer += "На улице прохладно, одевайся теплее!"
    else:
        answer += "На улице не очень холодно, одевайся как хочешь"
    bot.send_message(message.chat.id, answer)

bot.polling( none_stop = True)

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

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

Вот пример обработки ошибок. Тут перехватит любые ошибки, но лучше сконцентрироваться на только той что у вас падает except Err:

def send_echo(message):
    try:
        observation = mgr.weather_at_place(message.text)
    except:
        bot.send_message(message.chat.id, 'Такого городе нет!')
        return

    ... код если ошибки нет ...

И еще совет, не конкатенируйте с помощью знака + для этого в python есть несколько более лучших способов. Один из них: '{}'.format(var). Тут почитайте.

→ Ссылка