Python 获取带有请求的错误消息的简短版本
我正在使用请求,我需要一个异常的简短描述Python 获取带有请求的错误消息的简短版本,python,python-requests,Python,Python Requests,我正在使用请求,我需要一个异常的简短描述 try: resp = requests.get(url) except Exception, e: data['error'] = str(e) e、 g对于连接错误,str(e)变为(“连接中止”,错误(61,“连接被拒绝”) 我只想检索中止的连接。部分 根据Exception类的文档,e.strerror应该可以工作,但是print(e.strerror)显示None 有什么想法吗?异常类是所有用户定义异常的基类(它是一个推荐类)
try:
resp = requests.get(url)
except Exception, e:
data['error'] = str(e)
e、 g对于连接错误,str(e)
变为(“连接中止”,错误(61,“连接被拒绝”)
我只想检索中止的连接。
部分
根据Exception
类的文档,e.strerror
应该可以工作,但是print(e.strerror)
显示None
有什么想法吗?异常类是所有用户定义异常的基类(它是一个推荐类) 此类继承具有属性的
BaseException
。
该属性定义如下:
args
给异常构造函数的参数元组。一些内置异常(如OSError)需要一定数量的参数,并为该元组的元素指定特殊含义,而其他异常通常仅使用给出错误消息的单个字符串进行调用
如果错误消息位于args[0]
中,您可以尝试:
try:
resp = requests.get(url)
except Exception as e:
data['error'] = e.args[0]
您所说的不是标准异常,因为print(e.strerror)
应该引发AttributeError
对于你的回答,你应该考虑这个问题的答案:
所有请求异常继承,这继承了IOError
关于IOError
,文档中说:
异常环境错误
Python系统之外可能发生的异常的基类:IOError、OSError当使用2元组创建此类型的异常时,第一项在实例的errno属性上可用(假定为错误号),第二项在strerror属性上可用(通常是关联的错误消息)。元组本身在args属性上也可用
但是RequestException
似乎不是用2元组创建的,所以strerror是None
编辑:添加一些示例:
try:
resp = requests.get(url)
except requests.exceptions.HTTPError as e:
data['error'] = e.args[0]
except requests.exceptions.RequestException as e:
cause = e.args[0]
data['error'] = str(cause.args[0])
如果您有HTTPError
,则原始消息位于args[0]
中。请参见请求.模型.响应.引发\u以了解\u状态中的此代码示例
:
if http_error_msg:
raise HTTPError(http_error_msg, response=self)
如果您有ConnectionError
,则args[0]
包含原始错误。请参见requests.adapters.HTTPAdapter.send
中的此示例:
except (ProtocolError, socket.error) as err:
raise ConnectionError(err, request=request)
对于ProxyError
,sslerError
,Timeout
:args[0]
包含原始错误
在中浏览源代码
一种解决方案可以是:
try:
resp = requests.get(url)
except requests.exceptions.HTTPError as e:
data['error'] = e.args[0]
except requests.exceptions.RequestException as e:
cause = e.args[0]
data['error'] = str(cause.args[0])
异常除外,e:如果在e:#中“连接中止”,您的异常
,因为异常
返回字符串
,无法将字符串作为异常类
处理str(e.args[0])
与str(e)
相同,仍然是一个很长的描述,您需要深入挖掘:什么是类型(e.args[0])
?