Как избавиться от ошибки?

Рейтинг: -5Ответов: 1Опубликовано: 14.04.2023

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

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

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

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

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

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('Введите код валюты: ')
def get_course(currency):
    return xml.find("valute", {'id': currency}).value.text

with get_course(currency) as currency:
    print(currency)

Ответы

▲ 1

Можно использовать список с валютами которые вообще есть и уже исходя из них делать поиск

import requests
import xml.etree.ElementTree as ET
from contextlib import contextmanager
from datetime import datetime
URL = "http://www.cbr.ru/scripts/XML_daily.asp"
# Valid currency codes
valid_codes = ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CNY']
@contextmanager
def get_currency_rate(currency_id):
    today = datetime.today().strftime("%d/%m/%Y")
    url = f"{URL}?date_req={today}"
    response = requests.get(url)
    xml = ET.fromstring(response.content)
    valute = xml.find(f"./Valute[CharCode='{currency_id}']")
    if valute:
        rate = float(valute.find('Value').text.replace(",", "."))
        yield f"(1 шт.) {valute.find('Name').text} стоит(ят) {rate:.4f} руб."
    else:
        yield f"Ошибка: валюта {currency_id} не найдена"
currency_id = input("Введите код валюты: ")
if currency_id not in valid_codes:
    print("Неверный код валюты")
else:
    with get_currency_rate(currency_id) as rate:
        print(rate)