Ökosystem

anthropic-sdk-python 2.5.0: error_code, details und eine eigene Klasse je Fehler

3 Min. Lesezeit KI-generiert

88 Einträge stehen in der neuen Fehlertabelle: 16 für reine HTTP-Status, 72 für benannte Fehlercodes wie enforced_spend_limit_reached.

Featured image for "anthropic-sdk-python 2.5.0: error_code, details und eine eigene Klasse je Fehler"

Anthropic hat am Dienstagabend neue SDK-Versionen veröffentlicht: anthropic-sdk-python 2.5.0 sowie für TypeScript sdk-v1.5.0, vertex-sdk-v1.1.2 und google-cloud-sdk-v1.1.3. In den Release-Notes der Claude Platform steht davon noch nichts, deren letzter Eintrag ist vom 3. November.

Der Kern ist in beiden Sprachen derselbe: Die API liefert jetzt strukturierte Fehlerdetails, und das SDK macht daraus Ausnahmeklassen, die man gezielt abfangen kann.

Vier neue Felder auf APIStatusError

In Python trägt APIStatusError jetzt api_message (die error.message aus dem Antwortkörper), type (error.type), error_code (error.details.error_code, wenn es ein String ist) und details als typisiertes Objekt aus error.details. In TypeScript heißen die Felder apiMessage, errorCode und details und sitzen auf APIError.

Dazu kommt eine neue Datei _error_classes.py mit einer Zuordnungstabelle. Sie hat 88 Einträge: 16 davon hängen nur am HTTP-Status – 400 wird BadRequestError, 429 RateLimitError, 529 OverloadedError –, die anderen 72 an einem Paar aus Status und Fehlercode. Aus (429, "enforced_spend_limit_reached") wird EnforcedSpendLimitReachedError, aus (404, "thread_not_found") ThreadNotFoundError, aus (400, "claude_code_version_too_old") ClaudeCodeVersionTooOldError. Findet das SDK keinen passenden Code, fällt es auf den Status zurück, und ab 500 auf InternalServerError.

Die Liste liest sich wie eine Inhaltsangabe der letzten Monate. thread_not_found, thread_already_continued und thread_fingerprint_mismatch gehören zu den Message threads in der Messages API. storage_quota_exceeded, skill_name_taken, plugin_name_taken und scan_pending kommen aus Skills und Plugins. Neun Codes drehen sich um Compaction, acht um CMEK-Schlüssel, ein gutes Dutzend um Organisations- und Workspace-Verwaltung.

Dazu zwei Härtungen am Pfad

Beide SDKs lehnen Pfadparameter wie ;x, .;x und ..;x jetzt ab. Im Vertex-SDK werden Projekt-ID, Region und Modellname im Anfragepfad prozentkodiert, damit ein Schrägstrich im Modellnamen die Anfrage nicht aus /publishers/anthropic/models/ herausschieben kann; ein leerer Modellname oder ein Wert von . oder .. wirft einen AnthropicError. Für Bedrock gilt dasselbe, dort fliegt bei . oder .. ein ValueError. Im Google-Cloud-SDK werden Projekt, Location und Workspace-ID in der abgeleiteten Basis-URL kodiert.

Kleinere Korrekturen: OverloadedError und ServiceUnavailableError sind jetzt Unterklassen von InternalServerError, das erste Parsen einer Antwort ist threadsicher, Unions werden über Threads hinweg korrekt validiert, und das Memory-Tool kann das Verzeichnis /memories nicht mehr umbenennen oder löschen. Server-Sent Events werden nur noch einmal pro Chunk dekodiert. Dazu ein Filter ids beim Auflisten von Workspaces.

Fehlertexte zu parsen war immer die falsche Lösung

Wer eine Anwendung auf der Claude API betreibt, kennt die Stelle: Eine 400 kommt zurück, und im Code steht ein if "spend limit" in str(e). Solche Zeilen brechen, sobald jemand bei Anthropic eine Formulierung ändert. Mit error_code gibt es dafür jetzt einen stabilen Schlüssel. Und mit 72 Klassen muss man ihn nicht einmal selbst vergleichen. except EnforcedSpendLimitReachedError genügt.

Dass die Codes am Admin-API-Ausbau der letzten Woche hängen, ist kein Zufall: Wer Spend Limits und RBAC über die API verwaltet, läuft gegen Fehler, die der Nutzer der Anwendung nicht verschuldet hat und die man unterschiedlich behandeln muss. Für mich ist das eine der nützlicheren Änderungen seit der Version 2026-10-21 – unspektakulär, aber sie löscht eine ganze Klasse von Fehlerbehandlungs-Hacks.

Quellen

Claude PlatformSDKAPIEntwicklerwerkzeuge