首页 > 解决方案 > KeyError:python3中的“数据”

问题描述

我正在使用 graphql 来显示用户提出的拉取请求的数量。当我在 GitHub 的 graphql explorer 上运行该查询时,它运行良好。但是,当我运行脚本时,它显示 KeyError 并且预期值为字符串。即使输入的用户名被转换为字符串。

这是代码:

accessToken = "###################################"        
headers = {"Authorization": "bearer "+ accessToken }

    def getpullRequests(username):
        topic_query = """
        query {
        repositoryOwner(login:""" + str(username) + """) {
            login 
            ... on User {
            name
            avatarUrl
            pullRequests(last: 100){
                nodes{
                id
                createdAt
                additions
                deletions
                }
            }
            } 
        }
        } 
        """
        request = requests.post('https://api.github.com/graphql', json={'query': topic_query}, headers=headers)
        if request.status_code == 200:
            result = request.json()
            prsdata = {}
            for pr in result['data']['repositoryOwner']['pullRequests']['nodes']:
                prdata = {}
                if re.match(r'^2019-10', pr['createdAt']):
                    prdata['createdAt'] = pr['createdAt']
                    prdata['additions'] = pr['additions']
                    prdata['deletions'] = pr['deletions']
                    prsdata[pr['id']] = prdata
            if prsdata:
                print(prsdata)
            else:
                print("No PRs made in Hacktoberfest")

    if __name__ == "__main__":
        username = input("Enter the GitHub username: ")
        getpullRequests(username)

但是在经过一些尝试后进行调试时,我发现问题出在这一行:

for pr in result['data']['repositoryOwner']['pullRequests']['nodes']:

在运行代码时,我面临的错误是:

Enter the GitHub username: adiaux
Traceback (most recent call last):
  File "script.py", line 47, in <module>
    getpullRequests(username)
  File "script.py", line 33, in getpullRequests
    for pr in result['data']['repositoryOwner']['pullRequests']['nodes']:
KeyError: 'data'

有人请帮忙:)

标签: jsonpython-3.xgraphqlpython-3.7

解决方案


我找到了解决方案。基本上我使用了graphQL变量并将变量变成了一个dict,如下所示:

 variables=dict({
        "name":str(username)
    })

然而,相应地我修改了查询,包括:

 query ($name:String!){
    repositoryOwner(login:$name){
        login 
        ... on User {
        name
        avatarUrl
        pullRequests(last: 100){
            nodes{
            id
            createdAt
            additions
            deletions
            }
        }
        } 
    }
    }

感谢任何试图解决这个问题的人:)


推荐阅读