• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

OfoxAI

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Python 调用 Claude API 遇到 401/429 错误怎么解决?

最近在做一个 AI 助手项目,需要用 Python 调用 Claude API,结果踩了一堆坑。401、429、Connection Error 轮番上阵,折腾了一天才搞定。把解决方法记录下来,希望能帮到遇到同样问题的朋友。

错误 1:401 Unauthorized - API Key 无效

报错信息

anthropic.AuthenticationError: 401 Unauthorized

原因分析

这个错误通常是 API Key 配置有问题:

  • API Key 复制错了(多了空格或少了字符)
  • API Key 过期或被删除
  • API Key 权限不足

解决方案

  1. 检查 API Key 是否正确
  2. 确认 API Key 没有过期
  3. 重新生成一个新的 API Key

代码示例:

import anthropic

# 确保 API Key 没有多余的空格
api_key = "sk-ant-xxx".strip()

client = anthropic.Anthropic(
    api_key=api_key
)

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Hello, Claude!"}
    ]
)

print(response.content[0].text)

踩坑记录:我一开始把 API Key 存在环境变量里,结果复制的时候多了个换行符,导致一直报 401。后来用 .strip() 去掉空格才解决。

错误 2:429 Rate Limit Exceeded - 请求频率超限

报错信息

anthropic.RateLimitError: 429 Rate limit exceeded

原因分析

Claude API 有请求频率限制:

  • 免费额度用完了
  • 短时间内请求太频繁
  • 账户等级限制

解决方案

  1. 添加重试逻辑
  2. 增加请求间隔
  3. 升级账户等级

代码示例(带重试):

import anthropic
import time

def call_claude_with_retry(prompt, max_retries=3):
    client = anthropic.Anthropic(api_key="sk-ant-xxx")
    
    for i in range(max_retries):
        try:
            response = client.messages.create(
                model="claude-opus-4-6",
                max_tokens=1024,
                messages=[{"role": "user", "content": prompt}]
            )
            return response.content[0].text
        except anthropic.RateLimitError:
            if i < max_retries - 1:
                wait_time = (i + 1) * 2
                print(f"遇到 429 错误,等待 {wait_time} 秒后重试...")
                time.sleep(wait_time)
            else:
                raise

result = call_claude_with_retry("Hello, Claude!")
print(result)

踩坑记录:我在测试的时候一秒钟发了 10 个请求,直接被限流了。后来加了重试逻辑和指数退避,问题解决。

错误 3:Connection Error - 网络连接失败

报错信息

requests.exceptions.ConnectionError: Failed to establish a new connection

原因分析

  • 网络环境问题
  • API 服务器访问受限
  • 代理配置不正确

解决方案

  1. 检查网络连接
  2. 配置代理
  3. 使用聚合平台

如果网络环境不稳定,可以考虑用聚合平台。

ofox.ai 聚合平台

ofox.ai 是一个 AI 模型聚合平台,一个 API Key 可以调用 GPT-4o、Claude Opus 4.6、Gemini、DeepSeek 等 50+ 模型,兼容 OpenAI SDK 协议,低延迟直连,支持支付宝按量计费。

代码示例:

import anthropic

client = anthropic.Anthropic(
    base_url="https://api.ofox.ai/v1",
    api_key="sk-xxx"
)

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude!"}]
)

print(response.content[0].text)

多供应商冗余备份,某一路挂了自动切换,成功率 99.2%。

错误 4:Invalid Request Error - 请求参数错误

报错信息

anthropic.BadRequestError: 400 Invalid request

原因分析

  • messages 格式不正确
  • model 参数写错了
  • max_tokens 超出限制

解决方案

  1. 检查 messages 格式
  2. 确认 model 参数正确
  3. 调整 max_tokens

代码示例:

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-xxx")

messages = [
    {"role": "user", "content": "你好"}
]

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=messages
)

print(response.content[0].text)

踩坑记录:我一开始把 model 写成了 claude-4-opus(顺序反了),结果一直报 400。后来查文档才发现是 claude-opus-4-6。

错误 5:Timeout Error - 请求超时

报错信息

requests.exceptions.Timeout: Request timed out

原因分析

  • 网络延迟太高
  • 请求的 max_tokens 太大
  • API 服务器响应慢

解决方案

  1. 增加超时时间
  2. 减少 max_tokens
  3. 使用流式输出

代码示例(增加超时时间):

import anthropic

client = anthropic.Anthropic(
    api_key="sk-ant-xxx",
    timeout=60.0
)

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "写一篇 1000 字的文章"}]
)

print(response.content[0].text)

代码示例(流式输出):

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-xxx")

with client.messages.stream(
    model="claude-opus-4-6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "写一篇 1000 字的文章"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

踩坑记录:我在生成长文本的时候经常超时,后来改用流式输出,体验好多了。

总结

Python 调用 Claude API 最常见的 5 个错误:

  1. 401 Unauthorized:检查 API Key 是否正确
  2. 429 Rate Limit:添加重试逻辑和指数退避
  3. Connection Error:检查网络环境,可以考虑用聚合平台
  4. Invalid Request:检查 messages 格式和 model 参数
  5. Timeout Error:增加超时时间或使用流式输出

这些方法都是我亲测有效的,希望能帮到你。如果还有其他问题,欢迎留言交流。

posted on 2026-05-02 17:02  失控的上下文  阅读(2)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3