Повторный запрос данных от пользователя при неправильном вводе

Есть код, он рабочий, но мне нужно сделать проверку правильности написания города, т.е. когда вводишь неправильно город (с ошибкой или не существующий) он просил ввести заново, а так ошибку выдает

from pyowm import OWM

from pyowm.utils.config import get_default_config       # блок для изменения языка на русский
config_dict = get_default_config()
config_dict['language'] = 'ru'

owm = OWM('c920e1facb71d07020ecfbdfca252772', config_dict )
place = input("Введите город, в котором хотите узнать погоду: ")
mgr = owm.weather_manager()
observation = mgr.weather_at_place(place)  # выдает ошибку в этой строке
w = observation.weather

# print(w)  # для проверки общих сведений

st = w.detailed_status
t = w.temperature('celsius')["feels_like"]

print("В городе " + place + " сейчас " + str(st))  # вывод погоды
print("Температура " + str(t) + "°C")     # вывод температуры

Ошибка в Pycharme


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

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

Решение рекурсией:

import pyowm

from pyowm.utils.config import get_default_config

config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = pyowm.OWM('ТОКЕН', config_dict)
mgr = owm.weather_manager()


def get_weather(city):
    try:
        observation = mgr.weather_at_place(city)
    except pyowm.commons.exceptions.NotFoundError:
        return get_weather(input("Вы неверно ввели город, введите КОРРЕКТНОЕ название: "))
    return observation.weather, city


weather, city = get_weather(input("Введите город, в котором хотите узнать погоду: "))

st = weather.detailed_status
t = weather.temperature('celsius')["feels_like"]
print("В городе " + city + " сейчас " + str(st))
print("Температура " + str(t) + "°C")

Решение циклом:

import pyowm

from pyowm.utils.config import get_default_config

config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = pyowm.OWM('ТОКЕН', config_dict)
mgr = owm.weather_manager()

city = input("Введите город, в котором хотите узнать погоду: ")

all_ok = False
while not all_ok:
    try:
        observation = mgr.weather_at_place(city)
    except pyowm.commons.exceptions.NotFoundError:
        city = input("Вы неверно ввели город, введите КОРРЕКТНОЕ название: ")
    else:
        weather = observation.weather
        all_ok = True

st = weather.detailed_status
t = weather.temperature('celsius')["feels_like"]
print("В городе " + city + " сейчас " + str(st))
print("Температура " + str(t) + "°C")
→ Ссылка