如何捕获urllib的404错误避免脚本崩溃并返回指定内容?
解决urllib请求404导致脚本崩溃的问题
这个问题很常见,咱们可以通过异常捕获机制来让脚本优雅处理404错误,而不是直接崩溃。核心思路就是捕捉请求过程中抛出的HTTP异常,然后返回你想要的404相关内容。
修改后的函数示例
首先要导入urllib.error模块(用来捕获HTTP相关异常),然后用try-except块包裹请求逻辑:
import urllib.request import json import urllib.error # 新增:导入异常处理模块 def pull_sector(sym): company_data_link = "url%s%s" % (sym, API_KEY_COMPANY) try: # 把可能出错的请求逻辑放到try块里 with urllib.request.urlopen(company_data_link) as url: company_data = json.loads(url.read().decode()) return company_data except urllib.error.HTTPError as e: # 捕获HTTP状态码错误(比如404、500) if e.code == 404: # 返回你想要的404相关内容,这里用字典示例 return {"error_code": 404, "error_msg": "请求的公司数据不存在(404)"} else: # 其他HTTP错误也可以返回对应信息,避免崩溃 return {"error_code": e.code, "error_msg": f"HTTP错误: {e.reason}"} except urllib.error.URLError as e: # 捕获网络连接类错误(比如域名无效、无网络) return {"error_code": "NETWORK_ERROR", "error_msg": str(e.reason)}
关键说明
urllib.request.urlopen在遇到404时会抛出HTTPError异常,我们通过except块捕获它,判断状态码后返回自定义的错误内容。- 额外捕获
URLError是为了处理网络层面的错误(比如断网、域名解析失败),进一步提升脚本的健壮性。 - 返回的错误格式可以根据你的需求调整,比如返回字符串
"404 Not Found"或者其他结构,只要调用这个函数的地方能识别就行。
这样修改后,你的脚本就不会因为偶尔的404崩溃,而是会返回清晰的错误提示,方便后续逻辑处理。
内容的提问来源于stack exchange,提问作者blonc
相关产品推荐
相关产品推荐

