Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取带有请求的错误消息的简短版本_Python_Python Requests - Fatal编程技术网

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])