2017-07-05 4 views
4

エラーをトラップしていますが、返されたメッセージから欲しいものを抽出できません。ここでPython(2.7.13) - 配列のような文字列を持っています

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."}] 

私はmsgpure_err_codeを引き出したいけどtextはリストではありません。 [{ ... }]が私を混乱させています。 response.text[0][で、response.text['msg']はインデックスエラーをスローします。これは文字列(afaIk)のように動作します。

答えて

4

あなたはJSON dataです。レスポンスヘッダも、あなたにこれを言う:

'Content-Type': 'application/json' 

このデコードにjson moduleを使用します。

error_info = json.loads(response.text) 

error_infoが、その後(0またはがある可能性が示唆され、この場合、単一の辞書を含むリストですより多くの結果)。あなたは、ループができた、または1つの結果は常にあると仮定し、1つの辞書

print(error_info[0]['pure_err__key']) 
print(error_info[0]['msg']) 
0

は、あなたのresponse.textがJSONであると思われるので、まずそれを解析して、あなたへのアクセスだけであることを抽出するために[0]を使用することができ、その時点でデータ:

import json 

data = json.loads(response.text) 
print(data[0]["pure_err_code"]) 
print(data[0]["msg"]) 
# etc. 
+0

とあまりにzwerのおかげ! –

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 
+0

ありがとうございますpyjg - それは動作します。私は私の人生の2時間だと思いますが、私は戻ってこないでしょう! –

+0

@IanJonesようこそ! – PYA

関連する問題