Python使用requests库时if条件未满足仍执行代码的问题
问题根因
你的if判断存在逻辑写法错误,受Python运算符优先级规则影响,in的执行优先级高于or,你写的条件实际会被解析为:
if (bool("We're sorry, but the page you were looking for couldn't be found")) or ("Page not found" in pageresult):
其中第一个判断分支是直接对非空字符串做布尔判定,非空字符串的布尔值永远是True。根据or的短路逻辑,只要左侧表达式为真,就会直接判定整个条件成立,根本不会执行右侧的页面内容匹配判断,所以不管返回的页面内容是什么,if块内的代码都会执行。
修正代码
你需要为两个待匹配的提示文本都写完整的成员检查逻辑,修正后的完整代码如下:
pageresult = requests.get(combo[0], headers=header).text if "We're sorry, but the page you were looking for couldn't be found" in pageresult or "Page not found" in pageresult: print('on page\n') print(combo[0]) with open("PAGERESULT.txt", "w", encoding="utf-8") as text_file: text_file.write(pageresult)
可选优化点
- 优先通过HTTP状态码判断页面是否不存在:拿到requests响应对象后先判断
response.status_code == 404,再配合页面文本匹配,判定准确率远高于单独匹配文本 - 文件操作推荐使用
with上下文管理器,不需要手动调用close()方法,即使代码运行中途报错也能自动释放文件资源 - 写入文件时显式指定
encoding="utf-8",避免不同系统默认编码差异导致特殊字符写入乱码或者报错
内容的提问来源于stack exchange,提问作者Theta
相关产品推荐
相关产品推荐

