2015-08-31 6 views
-2

Я пытаюсь перечислить название и номер запроса на перенос в репозитории. Я хотел бы вернуть JSON как dict и напечатать название и номер запроса на растяжение.`TypeError: строковые индексы должны быть целыми числами

Если я просто напечатаю только заголовок или номер, я получаю ожидаемый результат, но если объединить значения для печати, я получаю TypeError: string indices must be integers.

#!/usr/bin/env python 
import github3 
from github3 import login, GitHub 
import requests 
import json 
import sys 

auth = dict(username="xxxxxxxxx",token="xxxxxxxxx") 
gh = login(**auth) 

result = gh.repository(owner="xxx", repository="xxxx").pull_request(x) 
data = result.as_dict() 
print data['title']['number'] 
+1

Я не знаком с этот API, но я полагаю, что 'data ['title']' является строкой, а не dict, как вы, кажется, думаете. Поэтому вы делаете что-то вроде «hello» ['number'] ', который, я надеюсь, вы согласитесь, не имеет смысла. –

ответ

2

Действительно, что сказал двухбитовый алхимик. Учитывая этот пример:

>>> auth = dict(username='larsks', token='mytoken') 
>>> gh = login(**auth) 
>>> result = gh.repository(owner='ansible', repository='ansible').pull_request(12165) 
>>> data = result.as_dict() 

Мы можем видеть, что data['title'] является строка:

>>> data['title'] 
'Be systematic about parsing and validating hostnames and addresses (proof of concept)' 

Если мы хотим, чтобы число PR, мы можем попросить:

>>> data['number'] 
12165 
+1

Удивительно, что вы можете узнать, прочитав сообщения об ошибках. :) –

+0

Ярски и двухбитовый алхимик .... Спасибо за объяснения и пример. Рассмотрев логику, это имеет смысл. Я пытался совместить одну строку с двумя ... 'print data ['title'] ['number']'. Когда я разбиваю его на два оператора печати ... 'print data ['title']', а затем другой оператор печати для 'print data ['number']', вывод будет таким же исчерпывающим – DBS