Python链接校验函数异常求助:错误链接未返回预期False
问题排查与修正
代码核心问题
- 异常捕获范围缺失:
requests库抛出的异常并非urllib.error.HTTPError,当域名不存在(如示例中的stackoverflowFALSE.com)时,会触发requests.exceptions.ConnectionError,原代码未捕获这类异常,导致错误链接无法返回False。 - 条件判断逻辑错误:
if y == 200 or 403:是无效逻辑——y是requests.Response对象,不可能等于整数200;且单独的403会被视为布尔值True,导致只要请求没触发捕获的异常,就会返回True,完全不符合需求。
修正后的代码
import requests from requests.exceptions import RequestException def form_url(urlcheck): try: response = requests.get(urlcheck) # 仅当状态码为200或403时返回True return response.status_code in (200, 403) except RequestException: # 捕获所有请求相关异常,覆盖域名不存在、连接失败等场景 return False print(form_url("https://stackoverflow.com/")) # 输出True print(form_url("https://stackoverflowFALSE.com/")) # 输出False
修正说明
- 优化异常捕获:使用
requests.exceptions.RequestException捕获所有请求类异常,覆盖域名解析失败、连接超时、HTTP错误等所有无效请求场景。 - 修复状态码判断:直接校验响应的
status_code是否在目标集合内,逻辑清晰且准确。 - 简化返回逻辑:无需多分支判断,直接返回布尔值,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Everyone make mistakes
相关产品推荐
相关产品推荐

