我正在捕获错误但无法从返回的消息中提取出我想要的内容。 这是代码:
except purestorage.PureHTTPError as response:
print "LUN Creation failed:"
print dir(response)
print "args:{}".format(response.args)
print "code:{}".format(response.code)
print "headers:{}".format(response.headers)
print "message:{}".format(response.message)
print "reason:{}".format(response.reason)
print "rest_version:{}".format(response.rest_version)
print "target:{}".format(response.target )
print "text:{}".format(response.text)
这是输出:
LUN Creation failed:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', 'args', 'code', 'headers', 'message', 'reason', 'rest_version', 'target', 'text']
args:()
code:400
headers:{'Content-Length': '113', 'Set-Cookie': 'session=....; Expires=Wed, 05-Jul-2017 16:28:26 GMT; HttpOnly; Path=/', 'Server': 'nginx/1.4.6 (Ubuntu)', 'Connection': 'keep-alive', 'Date': 'Wed, 05 Jul 2017 15:58:26 GMT', 'Content-Type': 'application/json'}
message:
reason:BAD REQUEST
rest_version:1.8
target:array1
text:[{"pure_err_key": "err.friendly", "code": 0, "ctx": "lun-name", "pure_err_code": 1, "msg": "Volume already exists."}]
我想提取msg
和pure_err_code
,但text
不是列表。
[{ ... }]
令我困惑。 response.text[0]
为[
而response.text['msg']
会引发索引错误,因此其行为类似于字符串(afaIk)。
答案 0 :(得分:4)
你有JSON data。响应头甚至告诉你:
'Content-Type': 'application/json'
使用json
module对此进行解码:
error_info = json.loads(response.text)
error_info
是一个列表,在这种情况下包含一个字典(建议可能有0个或更多结果)。你可以循环,或者假设总有1个结果,此时你可以使用[0]
来提取那个字典
print(error_info[0]['pure_err__key'])
print(error_info[0]['msg'])
答案 1 :(得分:0)
您的response.text
似乎是JSON,因此首先解析它然后访问您的数据:
import json
data = json.loads(response.text)
print(data[0]["pure_err_code"])
print(data[0]["msg"])
# etc.
答案 2 :(得分:0)
您的回答是json所以这样的事情会对您有所帮助:
import json
a = '[{"pure_err_key": "err.friendly", "code": 0, "ctx": "lun-name", "pure_err_code": 1, "msg": "Volume already exists."}]'
h = json.loads(a)
print(h[0]['code']) #prints 0