为何Try/Except代码无法捕获HTTPError?天气API请求异常
问题根源与修复方案
兄弟,你的Try/Except写法问题很明确——你把可能抛出HTTPError的核心API请求放在了try代码块外面!
看你的代码:owm.get_current(city, **settings)这行是在try块之前执行的,当这个API请求返回404错误时,异常直接就抛出来了,根本没进入到你后面的try-except逻辑里。毕竟你的try只包裹了打印那两行代码,而打印操作本身是不会触发HTTPError的。
修正后的代码
from urllib.error import HTTPError for city in cities: try: # 把API请求挪进try块内,确保异常能被捕获 current_city = owm.get_current(city, **settings) print(f'Current city is {current_city["name"]} and the city number is: {current_city["id"]}') except HTTPError as he: # 捕获并打印具体错误信息,方便排查问题 print(f"Ooops,请求出错了:{he}") print("------------")
额外调试建议
- 如果你想覆盖更多异常场景(比如网络连接中断、返回数据解析失败等),可以在捕获HTTPError之后再加一个通用的
Exception捕获,但建议先处理特定异常再处理通用情况,这样更容易定位问题。 - 把HTTPError捕获为变量
he能让你看到具体的错误状态码和描述,对调试API请求问题非常有用。
内容的提问来源于stack exchange,提问作者KPH3802
相关产品推荐
相关产品推荐

