我正在使用 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/