尝试使用PyGithub库访问Github问题注释

2024-06-07 00:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用PyGithub库访问问题注释。在

这是我实现的功能

    def get_issue_comments_dict(self, repository):
        """
        get issue comments
        outputs reponame: issue title, issue url, comments
        Return type: dict 
        """

        repo = self.user_obj.get_repo(repository)
        issues = repo.get_issues()
        issues_dict = {}
        i = 1
        for issue in issues:
            issue_dict = {}
            issue_dict['url'] = issue.url
            issue_dict['title'] = issue.title
            issue_dict['comments'] = [comment for comment in
                    issue.get_issue_comments()]
            issues_dict[i] = issue_dict
            i += 1
        return issues_dict

这就是我面临的错误。在

^{pr2}$

我做错什么了?在


Tags: inself功能urlforgettitlerepository
1条回答
网友
1楼 · 发布于 2024-06-07 00:18:43

好的,首先,aM最小ReproducibleE例如:

import github

gh = github.Github()
repo = gh.get_repo('PyGithub/PyGithub')
for issue in repo.get_issues():
    comments = issue.get_issue_comments()

结果是:

^{pr2}$

如何解决这个问题?在

Python实际上告诉您Issue对象没有一个名为get_issue_comments的方法(或任何属性)。显然你打错了方法。在

那么你怎么知道哪些方法是可行的呢?我同意documentation(在撰写本文时)相当有限。您还有许多其他选择:

使用help()

对于任何具有适当docstring的Python对象(模块、类、方法…),内置的^{}函数非常有用;-)

issue = repo.get_issues()[0]
help(issue)

这将打印:

Help on Issue in module github.Issue object:

class Issue(github.GithubObject.CompletableGithubObject)
 |  Issue(requester, headers, attributes, completed)
 |
 |  This class represents Issues. The reference can be found here https://developer.github.com/v3/issues/
 |
 |  Method resolution order:
 |      Issue
 |      github.GithubObject.CompletableGithubObject
 |      github.GithubObject.GithubObject
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  __repr__(self)
 |      Return repr(self).
 |
...
 |
 |  get_comments(self, since=NotSet)
 |      :calls: `GET /repos/:owner/:repo/issues/:number/comments <http://developer.github.com/v3/issues/comments>`_
 |      :param since: datetime.datetime format YYYY-MM-DDTHH:MM:SSZ
 |      :rtype: :class:`github.PaginatedList.PaginatedList` of :class:`github.IssueComment.IssueComment`
 |
...

正如您所看到的,这个类有很好的文档记录,显然它包含一个“get_comments”方法,您可以使用它。在

使用dir()

您还可以使用内置函数^{}查看对象包含哪些属性(如方法):

issue = repo.get_issues()[0]
print(dir(issue))  # in an interactive shell you don't have to print()

这将打印:

['CHECK_AFTER_INIT_FLAG', '_CompletableGithubObject__complete', '_CompletableGithubObject__completed', '_GithubObject__makeSimpleAttribute', '_GithubObject__makeSimpleListAttribute', '_GithubObject__makeTransformedAttribute', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_assignee', '_assignees', '_body', '_closed_at', '_closed_by', '_comments', '_comments_url', '_completeIfNeeded', '_completeIfNotSet', '_created_at', '_events_url', '_headers', '_html_url', '_id', '_identity', '_initAttributes', '_labels', '_labels_url', '_locked', '_makeBoolAttribute', '_makeClassAttribute', '_makeDatetimeAttribute', '_makeDictAttribute', '_makeDictOfStringsToClassesAttribute', '_makeIntAttribute', '_makeListOfClassesAttribute', '_makeListOfDictsAttribute', '_makeListOfIntsAttribute', '_makeListOfListOfStringsAttribute', '_makeListOfStringsAttribute', '_makeStringAttribute', '_makeTimestampAttribute', '_milestone', '_number', '_parentUrl', '_pull_request', '_rawData', '_repository', '_requester', '_state', '_storeAndUseAttributes', '_title', '_updated_at', '_url', '_useAttributes', '_user', 'active_lock_reason', 'add_to_assignees', 'add_to_labels', 'as_pull_request', 'assignee', 'assignees', 'body', 'closed_at', 'closed_by', 'comments', 'comments_url', 'create_comment', 'create_reaction', 'created_at', 'delete_labels', 'edit', 'etag', 'events_url', 'get__repr__', 'get_comment', 'get_comments', 'get_events', 'get_labels', 'get_reactions', 'html_url', 'id', 'labels', 'labels_url', 'last_modified', 'lock', 'locked', 'milestone', 'number', 'pull_request', 'raw_data', 'raw_headers', 'remove_from_assignees', 'remove_from_labels', 'repository', 'setCheckAfterInitFlag', 'set_labels', 'state', 'title', 'unlock', 'update', 'updated_at', 'url', 'user']

在这里,您还将看到它不包含名称“get_issue_comments”,但它包含名称“get_comments”。在

解决方案

更改以下行:

issue_dict['comments'] = [comment for comment in issue.get_issue_comments()]

收件人:

issue_dict['comments'] = [comment for comment in issue.get_comments()]

相关问题 更多 >