Как избавиться от ошибки?
Создайте функцию – контекст менеджер, которая будет получать на вход 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 шт):
Автор решения: Aleksandr Fetisov
→ Ссылка
Можно использовать список с валютами которые вообще есть и уже исходя из них делать поиск
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)