エラー処理
Anthropic SDK は HTTP ステータスに応じた例外クラスを返します。| 例外 | ステータス | 意味 |
|---|---|---|
BadRequestError |
400 | リクエスト不正 |
AuthenticationError |
401 | API キー誤り |
PermissionDeniedError |
403 | 権限不足 |
NotFoundError |
404 | モデル ID 等が無効 |
RateLimitError |
429 | レート上限超え |
APIStatusError |
5xx | サーバー側エラー |
APIConnectionError |
- | 通信失敗 |
リトライ付きの呼び出し
wzxhzdk:1SDK 標準のリトライ機構
Anthropic(max_retries=3, timeout=60) のように、SDK 自体にもリトライ・タイムアウト設定があります。
シンプルな用途ならまずはこちらで十分。レートリミット (Rate Limit)
Anthropic はティアごとに RPM (リクエスト/分), TPM (トークン/分) が決まっています。 - 開発初期: 低い上限。 - 使用量・支払いが増えると 自動昇格 または申請で引き上げ可能。Retry-After ヘッダ
429 のレスポンスにはretry-after ヘッダが含まれることがあるので、
これを尊重して待機するのが行儀の良い実装です。SDK は自動で読みます。Idempotency (冪等性)
同じリクエストを再送しても安全か? Anthropic の messages API は副作用なし なので、リトライしても問題ありません。 ただしユーザー側でログ・課金処理を多重に走らせないよう注意。よく出るエラーと診断
| エラーメッセージ | 原因 | 対処 |
|---|---|---|
Invalid API Key |
キーが間違い・失効 | Console で確認 |
model not found |
モデル ID 誤り | claude-sonnet-4-6 のような正しい ID |
max_tokens too large |
プランの上限超え | 引き下げる |
prompt is too long |
コンテキスト超過 | 入力短縮 / モデル変更 |
429 |
レート超過 | バックオフ |
overloaded_error |
サーバー過負荷 | バックオフして再試行 |
サーキットブレーカー
連続して失敗するときは 一時停止 (circuit breaker) を入れて、 下流サービスが過負荷で潰れるのを防ぎます。class Breaker:
def __init__(self, threshold=5, cooldown=60):
self.fails = 0
self.opened_at = None
self.threshold = threshold
self.cooldown = cooldown
def call(self, fn, *a, **kw):
if self.opened_at and (time.time() - self.opened_at) < self.cooldown:
raise RuntimeError("circuit open")
try:
r = fn(*a, **kw)
self.fails = 0
return r
except Exception:
self.fails += 1
if self.fails >= self.threshold:
self.opened_at = time.time()
raise