ich diese Methode in einer Datenklasse habe:Wert kann nicht von Python dict bekommen
def submit_request(self, method, path, body=None, header=None):
conn = httplib.HTTPSConnection(self.host)
conn.request(method, path, body, self.headers)
resp = conn.getresponse()
return resp.status, resp.read()
die ich Antworten von jeder Anfrage zu greifen verwenden. Für die aktuelle Antwort, mit der ich arbeite, kann ich keine spezifischen Werte abrufen.
Normalerweise würde ich
status, resp = submit_request("GET", "/path/to/...", body)
info = json.loads(resp)
value = info["value"]
gehen und ich würde eingestellt werden, dass entsprechenden Wert aus dem dict zu verwenden. Aber wie ich unten zeigen werde, kann ich das für diesen Fall nicht tun.
>>> print resp
[{"deviceId":28,"displayName":"test-device","status":"Pending_Authorized"}]
wenn ich kopieren und PASE diese Antwort kann ich
tun>>> resp[0]['deviceId']
28
aber im Code tun nicht funktioniert (ich nur [
von resp[0]
). Ich bekomme immer
TypeError: string indices must be integers, not str
Jeder Hinweis darauf, warum dies geschieht?
Hier ist der entsprechende Code:
def test_get_device_list(self):
'''
GET /Device/List
'''
status_code, resp = self.api.submit_request("GET", "/Device/List")
log.log_info("GET /Device/List: HTTP - %s" % str(status_code))
log.log_info("GET /Device/List: Response - %s" % str(resp))
self.assertEqual(status_code, 200)
#GET /Device/{DeviceID}
device_id = self.api.parse_header(resp, "deviceId")
status_get, resp_get = self.api.submit_request("GET", "/Device/%s" % str(device_id))
log.log_info("GET /Device/{DeviceID}: HTTP - %s" % str(status_get))
log.log_info("GET /Device/{DeviceID}: Response - %s" % str(resp_get))
self.assertEqual(status_get, 200)
und von der Stützdatenklasse
def submit_request(self, method, path, body=None, header=None):
conn = httplib.HTTPSConnection(self.host)
conn.request(method, path, body, self.headers)
resp = conn.getresponse()
return resp.status, resp.read()
def parse_header(self, resp, arg):
info = json.loads(resp)
parse = info["%s" % str(arg)]
return parse
Hier sind die vollständigen Fehler:
ERROR: test_get_device_list (__main__.TestAPI)
----------------------------------------------------------------------
Traceback (most recent call last):
File "API.py", line 207, in test_get_device_list
device_id = self.api.parse_header(str(resp), "deviceId")
File "/home/zach/Desktop/Automation/data.py", line 47, in parse_header
parse = info["%s" % str(arg)]
TypeError: list indices must be integers, not str
ich einen Weg zu finden, bin versucht zu Holen Sie die obige "deviceId" aus der Antwort. Ich habe es mit verschiedenen Antworten mit der Methode parse_header() gemacht, aber für diese Antwort funktioniert es nicht.
Sie laden das Antwortobjekt - das ein Array mit einem einzelnen Objekt zu sein scheint - in die Variable 'info' und versuchen dann, auf die Eigenschaft" value "dieses Arrays zuzugreifen. Arrays haben keine "Value" -Eigenschaften. – Hamms
Also ... warum hast du 'json.loads' nicht auf deinem' resp' String verwendet? – user2357112
@ user2357112 Ich bekomme den gleichen TypeError – user3239567