无法从python dict获得价值

时间:2016-04-25 23:18:14

标签: python json http

我在数据类中有这个方法:

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

我用它来获取每个请求的响应。对于我正在处理的当前响应,我无法获取具体值。

通常我会去

status, resp = submit_request("GET", "/path/to/...", body)
info = json.loads(resp)
value = info["value"]

我将设置为使用dict中的相应值。但正如我将在下面展示的那样,我无法为这种情况做到这一点。

>>> print resp
[{"deviceId":28,"displayName":"test-device","status":"Pending_Authorized"}]

如果我复制并点击这个回复我可以做

>>> resp[0]['deviceId']
28

但在代码中执行此操作无效(我只是从[获得resp[0])。我一直在

TypeError: string indices must be integers, not str

有关为何发生这种情况的任何迹象?

以下是相关代码:

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)

来自支持数据类

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

这是完整的错误:

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

我正试图找到一种方法来从响应中获取上述'deviceId'。我使用parse_header()方法做了不同的响应但是对于这个响应它不起作用。

1 个答案:

答案 0 :(得分:0)

您正在尝试使用字符串访问您的列表,在尝试访问密钥之前,您是否尝试访问此处的第一项以访问您的字典?

parse = info[0].get(arg)