LoslegenKostenlos starten

API-Tool-Aufrufe robust machen

Im Produktivbetrieb darf das convert_currency()-Tool des Currency-Servers nicht hängen bleiben, wenn die Exchange-Rate-API langsam oder nicht erreichbar ist. Um das zu verhindern, implementierst du einen Timeout für die Anfrage und sorgst dafür, dass bei jedem Fehler eine kurze, klare Fehlermeldung an die Nutzerin oder den Nutzer zurückgegeben wird – statt einer rohen Exception.

Ein MCP-Server wurde bereits instanziiert und in der Variable mcp gespeichert.

Diese Übung ist Teil des Kurses

<Kurs>Einführung in das Model Context Protocol (MCP)</Kurs>
Kurs ansehen

Übungsanweisungen

  • Implementiere eine Try-Except-Logik, die die API-Anfrage versucht und bei einem Fehler durch Abfangen der Exception sauber fehlschlägt.
  • Füge dem Aufruf requests.get() einen Timeout von 10 Sekunden hinzu, damit die Anfrage nicht unbegrenzt hängen bleibt.

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

@mcp.tool()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> str:
    """
    Convert an amount from one currency to another using current exchange rates.

    Args:
        amount: The amount to convert
        from_currency: Source currency code (e.g., 'USD', 'EUR', 'GBP')
        to_currency: Target currency code (e.g., 'USD', 'EUR', 'GBP')

    Returns:
        A string with the conversion result and exchange rate
    """
    url = f"https://api.frankfurter.dev/v1/latest?base={from_currency}&symbols={to_currency}"
    # Implement try-except to gracefully handle errors
    ____:
        # Add a 10-second timeout so the request does not hang
        r = requests.get(url, ____=____)
        r.raise_for_status()
        data = r.json()
        rate = data["rates"].get(to_currency)
        if rate is None:
            return f"Could not find exchange rate for {from_currency} to {to_currency}"
        return f"{amount} {from_currency} = {amount * rate:.2f} {to_currency} (Rate: {rate})"
    ____ requests.exceptions.RequestException as e:
        return f"Error converting currency: {e}"

print(convert_currency(10, "USD", "EUR"))
Code bearbeiten und ausführen