尝试使用 PyGithub 库访问 Github 问题评论 [英] trying to access Github issue comments using PyGithub library

查看:26
本文介绍了尝试使用 PyGithub 库访问 Github 问题评论的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 PyGithub 库访问问题评论.

I am trying to access issue comments using PyGithub library.

这是我实现的功能,

    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

这是我面临的错误.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "GithubWrapper.py", line 164, in get_issue_comments_dict
    issue.get_issue_comments()]
AttributeError: 'Issue' object has no attribute 'get_issue_comments'

我在这里做错了什么?

推荐答案

好吧,首先,一个M最小的R可复制的E您的问题示例是:

Okay, first of all, a Minimal Reproducible Example for your question is:

import github

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

导致:

AttributeError: 'Issue' object has no attribute 'get_issue_comments'

如何解决这个问题?

Python 从字面上告诉您 Issue 对象没有名为 get_issue_comments 的方法(或任何属性,就此而言).显然你调用了错误的方法.

How to solve this?

Python is literally telling you that the Issue object does not have a method (or any attribute, for that matter) called get_issue_comments. Apparently you're calling the wrong method.

那么你怎么知道哪些方法可用呢?我同意文档(在撰写本文时)非常有限.您还有许多其他选择:

So how can you know which methods are available? I agree the documentation is (at the time of writing) quite limited. You have a number of other options:

使用 help()

对于任何具有适当文档字符串的 Python 对象(模块、类、方法等),内置的 help() 函数真的很有帮助 ;-)

For any Python object (module, class, method, ...) that has a proper docstring, the built-in help() function is really very helpful ;-)

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",您可以使用该方法.

As you can see, the class is well documented and apparently it contains a method 'get_comments', which you can use.

使用 dir()

您还可以使用内置函数 dir():

You can also see which attributes (such as methods) an object contains, using the built-in function 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".

Here you will also see that it does not include a name 'get_issue_comments', but that it does contain a name 'get_comments'.

更改以下行:

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

到:

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

这篇关于尝试使用 PyGithub 库访问 Github 问题评论的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆