必须手动提取原始http状态码和日志来定位api错误:展开traceback找raise_for_status()后的状态码;启用logging.debug或urllib3日志查看完整请求响应;用try-except捕获异常并打印status_code、headers及原始content。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在Jupyter Notebook里调用API却只看到模糊的“ConnectionError”或空白响应,根本不知道是401未授权、429限流还是503服务不可用时,必须直接定位到原始报错日志和HTTP状态码——这些信息不会自动显示在单元格输出里,得手动挖出来。
从单元格输出中提取原始错误堆栈
执行API请求后若报错,先别急着重试。点击单元格下方红色错误块左侧的「▶」展开完整Traceback。
找到最后一行以raise_for_status()或requests.exceptions.HTTPError开头的报错行,它后面紧跟着的就是原始HTTP状态码,例如400 Client Error: Bad Request for url: https://api.example.com/v1/data——这里的【400】就是关键错误码。
如果没看到明确的状态码,说明你用了response.text但没检查response.status_code,这种写法会掩盖真实错误。
启用requests详细日志输出
方法一:临时开启requests底层日志(推荐)
在Notebook最上方单元格运行:
import logging<br>logging.basicConfig(level=logging.DEBUG)<br>import requests
再执行你的API请求,终端(不是Notebook界面!)会实时打印完整的HTTP请求头、响应头和状态码。注意:【日志只输出到启动Notebook的终端窗口,不在浏览器里显示】。
方法二:用urllib3显式控制日志级别
执行:
import urllib3<br>urllib3.add_stderr_logger(level=logging.DEBUG),效果同上,但更精准捕获连接层错误。
捕获并结构化解析异常信息
第一步:用try-except包裹请求,强制提取状态码和响应体
import requests<br>try:<br> resp = requests.get("https://api.example.com/data", timeout=5)<br> resp.raise_for_status()<br>except requests.exceptions.HTTPError as e:<br> print("HTTP错误码:", e.response.status_code)<br> print("响应内容:", e.response.text[:200])<br>except requests.exceptions.Timeout:<br> print("请求超时")<br>except requests.exceptions.ConnectionError:<br> print("无法连接服务器")
第二步:对非2xx响应,直接打印e.response.headers,某些API会在X-Error-Code或Retry-After头里返回定制错误标识。
第三步:如果响应体是JSON格式但解析失败,先用e.response.content原始字节查看是否含BOM或乱码——很多中文API返回GBK编码却声明UTF-8,直接.json()必报UnicodeDecodeError。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











