Python网络异常分连接类、请求类、响应类三类,按“建连→发请求→收响应”顺序排查最有效:连接类如ConnectionRefusedError、TimeoutError、gaierror;请求类如InvalidURL、MissingSchema;响应类需调用raise_for_status()触发HTTPError。
Python网络异常主要分三类:连接类、请求类、响应类,每类对应不同阶段的失败原因,定位时按“建连→发请求→收响应”顺序排查最有效。
发生在建立TCP连接阶段,典型如无法到达目标服务器。常见具体异常包括 ConnectionRefusedError(服务未启动或端口关闭)、TimeoutError(连接超时)、gaierror(DNS解析失败)。
http://localhost:8080 中端口是否与服务实际监听一致ping 域名 或 nslookup 域名 验证;本地开发时优先用 127.0.0.1 替代 localhost 避免IPv6解析干扰timeout 参数,如 requests.get(url, timeout=5),避免无限等待多由客户端构造错误引发,不涉及网络传输失败。典型有 InvalidURL(URL格式非法)、MissingSchema(缺少 http:// 或 https://)、TooManyRedirects(重定向循环)。
urllib.parse.urlparse() 提前检查 .scheme 是否为 http 或 https
allow_redirects=False 查看原始响应状态码,再判断是否需调整逻辑请求已发出且收到服务器响应,但状态码表明异常(如4xx/5xx)。注意:requests 默认不会主动抛出异常,需手动调用 response.raise_for_status() 触发 HTTPError。
立即学习“Python免费学习笔记(深入)”;
response.status_code == 200 判断成功,有些API用201、204等也属正常响应Content-Type)、请求体(JSON字段缺失/类型错误)、认证信息(token过期或权限不足)response.headers),便于协同排查不属于标准异常分类,但实践中常导致“看似网络异常”的表现:
SSLError 或 CertificateError,生产环境不应设 verify=False,而应更新系统CA证书或指定正确证书路径UnicodeDecodeError 在读取响应文本时出现,说明服务器返回了非UTF-8编码内容,需用 response.content.decode('gbk') 等适配proxies 参数时,确保代理地址可达且协议匹配(http代理不能用于https请求除非支持CONNECT)