Как вывести сообщение 'валюта не найдена' при некорректном введении id валюты

Рейтинг: 0Ответов: 1Опубликовано: 16.04.2023

Создайте функцию – контекст менеджер, которая будет получать на вход ID валюты и возвращать информацию о ней в виде:

(1 шт.) Австралийский доллар стоит(ят) 49,2779 руб.

Если такой валюты нет – ошибка должна обрабатываться и выводиться, что такая валюта не найдена.

Для получения курса валют воспользуйтесь API центробанка:

http://www.cbr.ru/scripts/XML_daily.asp

http://www.cbr.ru/scripts/XML_daily.asp

import contextlib
import requests
from bs4 import BeautifulSoup
from datetime import datetime

url = "http://www.cbr.ru/scripts/XML_daily.asp?"

today = datetime.today()
today = today.strftime("%d/%m/%Y")

payload = {"date_req": today}

response = requests.get(url, params=payload)

xml = BeautifulSoup(response.content, 'lxml')


currency = input('Введите код валюты: ')
valute_name = xml.find('valute', {'id': currency}).charcode.text
@contextlib.contextmanager
def get_course(currency):
    try:
        yield xml.find("valute", {'id': currency}).value.text
    except currency:
        print('валюта не найдена')
with get_course(currency) as currency:
    print(f"(1 шт.) {valute_name} стоит(ят) {currency} руб.")

Ответы

▲ 0Принят

Попробуйте так:

import contextlib
import requests
from bs4 import BeautifulSoup
from datetime import datetime

url = "http://www.cbr.ru/scripts/XML_daily.asp?"

today = datetime.today()
today = today.strftime("%d/%m/%Y")
payload = {"date_req": today}
response = requests.get(url, params=payload)

xml = BeautifulSoup(response.content, 'lxml')

while True:                                                          # +++
    currency = input('Введите id валюты (например: R01235): ')       # +++
    if not currency:                                                 # +++
        break                                                        # +++

    xml_find = xml.find('valute', {'id': currency})                  # +++
    # print(f'{xml_find}')

    if not xml_find:                                                 # +++
        print(f'ID валюты "{currency}" - не найдено.\n')               # +++
        continue                                                     # +++
    
    valute_name = xml.find('valute', {'id': currency}).charcode.text

    @contextlib.contextmanager
    def get_course(currency):
        try:
            yield xml.find("valute", {'id': currency}).value.text
        except currency:
            print('валюта не найдена')
            
    with get_course(currency) as currency:
        print(f"(1 шт.) {valute_name} стоит(ят) {currency} руб.\n")

введите сюда описание изображения