python - 处理 ConnectionError 和状态代码错误

标签 python python-requests

我正在使用 requests 从服务器获取一些数据,这是在 while 循环中完成的。然而,时不时地会出现以下两个错误之一。第一个是请求返回的status_code不等于200,这会打印出一条错误消息。第二个是引发 ConnectionError 异常。

如果我收到任一错误,我想继续尝试获取数据。但是,我不确定如何针对这两种类型的错误执行此操作。

我知道如何处理ConnectionError异常,例如:

def get_data(self, path):
    # Keep trying until the connection attempt is successful
    while True:
        # Attempt a request
        try:
            request_return = requests.get(path, timeout=30)
            break
        # Handle a connection error
        except ConnectionError as e:
            pass
# Return the data
return request_return.json()

但是我怎样才能以类似的方式处理status_code呢?与 raise_for_status() 方法有关吗?

最佳答案

似乎您可以调整您的 try/except 使其看起来像这样:

try:
    request_return = requests.get(path, timeout=30)
    if request_return.status_code == 200:
        break
except ConnectionError as e:
    pass

如果您愿意,也可以使用 request_return.status_code == requests.codes.ok

如果您决定将请求作为异常处理(无论出于何种原因),raise_for_status() 将返回 HTTPError ,所以你可以像这样修改你的 try/except :

try:
    request_return = requests.get(path, timeout=30)
    request_return.raise_for_status()
    break
except ConnectionError as e:
    pass
except HTTPError as e:
    pass

关于python - 处理 ConnectionError 和状态代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856896/

相关文章:

Python临时目录执行其他进程?

python - 如何在pandas数据帧上使用haversine库使用haversine距离

python - 如何使用 BeautifulSoup 选择 href 类标签?

python - 需要向下滚动时进行网页抓取

用于将 UTF-8 转换为 ASCII 的 Python 脚本

python: Mac OS X.malloc 错误。未分配正在释放的指针。中止陷阱 6

python - 协方差不是正定的

python - 循环中的选项值

python - 如何在Python中使用requests上传文件

Python 请求 OAuth2Session() 传递多个范围参数