我有一个关于如何使用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...
我在正确的轨道上吗?
请注意,用户@ jacquev6在对问题#82的评论中部分解决了此问题。
确实,这是正确的道路。 这里有几点评论。
您对status
和data
:它们是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/中对其进行记录
听起来很棒。 再次感谢您的辛勤工作,以及
优秀的软件设计技巧。 该产品非常出色
有用且容易找出答案-解决这个问题将使其变得更加均匀
更好的。
在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)
* SOE:UC教职员工的任命,级别和职位相对应
终身教授的担保
谢谢\ o /很高兴听到满意的客户!
是的,我想我可以给你加薪---我付给你的薪水是我的两倍
现在。 :-)
2013年3月28日,星期四,下午1:33,文森特·雅克
[email protected] :
谢谢\ o /很高兴听到满意的客户!
-
直接回复此电子邮件或在Gi tHub上查看它
。
Phill Conrad,讲师(SOE)*,计算机科学系
加州大学圣塔芭芭拉分校
联合任命:创意研究学院(www.ccs.ucsb.edu)
* SOE:UC教职员工的任命,级别和职位相对应
终身教授的担保
呵呵,那将是我有史以来最大和最小的加薪!
请注意:
此问题的一部分是在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
可以正常工作。
最有用的评论
你好,
我尝试捕获一个异常:
现在我尝试直接访问它,出现以下错误:
我如何才能捕捉到这个特定的异常,而不仅仅是一般的githubexception?