Pygithub: 如何使用GithubException对象

创建于 2013-03-28  ·  14评论  ·  资料来源: PyGithub/PyGithub

我有一个关于如何使用GithubException对象的问题

样例代码:
尝试:
team = org.create_team(teamName,
[],
“推”);
除了GithubException作为e:
列印(e)

当我打印(e)时,我得到:

 422 {u'message': u'Validation Failed', u'errors': [{u'field': u'name', u'code': u'already_exists', u'resource': u'Team'}]}

我想做的是查看GithubException对象的属性和成员函数列表,以便我可以提取各种东西来检查特定事件……但是我可以在文档中找到PyGithub API。 也许我只需要更好地理解PyGithub API与底层github RESTful API之间的关系即可。

从源头看,似乎有GithubException对象的两个属性:

https://github.com/jacquev6/PyGithub/blob/master/github/GithubException.py

data

并将其与输出一起显示为状态422(可能是由API返回?),数据是字典对象(可能是返回的JSON的编码?),但这仅是猜测。

看来,GithubException在源代码中出现的唯一位置是在Requester.py-中,这倾向于证实我的猜测。

github API本身的文档中是否有地方可以找到人们期望在JSON对象中找到的键,即在这种情况下为“消息”,“错误”,然后在“错误”,“字段”内,“代码”,“和”资源?

从反复试验的猜测中,我选择了这样的代码,但是感觉像“ hacky ---如果我知道自己是否做对了,我会感到更自在...

team = False   # Sentinel to see if it succeeded or failed
try:
   team = org.create_team(teamName,
                     [],
                     "push");
   print(" team {0} created...".format(teamName),end='')
except GithubException as e:
   if (e.data['errors'][0]['code']=='already_exists'):
      print(" team {0} already exists...".format(teamName),end='') 
   else:
      print (e)

if (team != False):
   # do something with team...

我在正确的轨道上吗?

question

最有用的评论

你好,
我尝试捕获一个异常:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

现在我尝试直接访问它,出现以下错误:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

我如何才能捕捉到这个特定的异常,而不仅仅是一般的githubexception?

所有14条评论

请注意,用户@ jacquev6在对问题#82的评论中部分解决了此问题。

确实,这是正确的道路。 这里有几点评论。

您对statusdata :它们是HTTP状态和已解码的json有效负载。 我这样做是因为我不知道可能发生的错误的类型,所以我无法像在PyGithub中的所有其他类中那样创建特定的属性。 (我知道NamedUser总是有name ,但是对异常/错误没有这样的了解)

因此,每当Github API v3返回高于400的HTTP状态时,我都会使用此状态和有效载荷来筹集GithubException

今天检查Github API v3文档,我看到一些有关错误的信息: http :

因此,我现在可以做的事情是我进一步了解错误是创建GithubException子类,并在看到特定类型的错误时引发它们。 这将允许客户端对except类进行特定的错误处理,并使其他类进入堆栈。

我将在1.14.0版中进行此操作,并以此为契机在http://jacquev6.github.com/PyGithub/中对其进行记录

我将在分支topic/SpecificExceptions

听起来很棒。 再次感谢您的辛勤工作,以及
优秀的软件设计技巧。 该产品非常出色
有用且容易找出答案-解决这个问题将使其变得更加均匀
更好的。

在2013年3月28日星期四,下午12:59,文森特·雅克
[email protected]

我将在分支topic / SpecificExcept ionshttps://github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions中执行此操作

-
直接回复此电子邮件或在Gi tHub上查看它

Phill Conrad,讲师(SOE)*,计算机科学系
加州大学圣塔芭芭拉分校
联合任命:创意研究学院(www.ccs.ucsb.edu)

[email protected]www.cs.ucsb.edu/~pconrad

* SOE:UC教职员工的任命,级别和职位相对应
终身教授的担保

谢谢\ o /很高兴听到满意的客户!

是的,我想我可以给你加薪---我付给你的薪水是我的两倍
现在。 :-)

2013年3月28日,星期四,下午1:33,文森特·雅克
[email protected]

谢谢\ o /很高兴听到满意的客户!

-
直接回复此电子邮件或在Gi tHub上查看它

Phill Conrad,讲师(SOE)*,计算机科学系
加州大学圣塔芭芭拉分校
联合任命:创意研究学院(www.ccs.ucsb.edu)

[email protected]www.cs.ucsb.edu/~pconrad

* SOE:UC教职员工的任命,级别和职位相对应
终身教授的担保

呵呵,那将是我有史以来最大和最小的加薪!

请注意:

  • 检查测试github.tests.Organization.testMembers:状态为403
  • 使用令牌进行错误身份验证时为特定的exn添加测试用例

此问题的一部分是在1.14.0中提供的,但我在1.15.0版中保留了此问题,以添加其他一些特定的异常类型。

要创建的新的特定异常:HTTP 403“错误的用户代理”(请参阅​​#160)

我现在要解决此问题,但是遇到异常时,我将继续添加特定类型的异常。

你好,
我尝试捕获一个异常:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

现在我尝试直接访问它,出现以下错误:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

我如何才能捕捉到这个特定的异常,而不仅仅是一般的githubexception?

你好,
我尝试捕获一个异常:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

现在我尝试直接访问它,出现以下错误:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

我如何才能捕捉到这个特定的异常,而不仅仅是一般的githubexception?

@NicoHood使用github.BadCredentialsException -从源代码中可以更清楚地看到。

GithubException是一个类,也是一个模块,该类的完整模块路径是github.GithubException.GithubException,您无法从中导入BadCredentialsException。 所有异常都通过github导出,因此from github import BadCredentialsException可以正常工作。

此页面是否有帮助?
0 / 5 - 0 等级