لدي سؤال حول كيفية العمل مع كائن GithubException
عينة من الرموز:
يحاول:
team = org.create_team (اسم الفريق ،
[] ،
"يدفع")؛
باستثناء GithubException كـ e:
طباعة (هـ)
عندما أطبع (هـ) أحصل على:
422 {u'message': u'Validation Failed', u'errors': [{u'field': u'name', u'code': u'already_exists', u'resource': u'Team'}]}
ما أود أن أكون قادرًا على فعله هو الاطلاع على قائمة السمات ووظائف الأعضاء في كائن GithubException حتى أتمكن من سحب أشياء مختلفة للتحقق من أحداث معينة ... ولكن يمكنني العثور على هذا في وثائق واجهة برمجة تطبيقات PyGithub. ربما أحتاج فقط إلى فهم العلاقة بين PyGithub API و Github RESTful API بشكل أفضل.
من المصدر ، يبدو أن هناك خاصيتين لكائن GithubException:
https://github.com/jacquev6/PyGithub/blob/master/github/GithubException.py
data
وبجمع ذلك مع الإخراج ، يبدو أن 422 هي الحالة (ربما تم إرجاعها بواسطة API؟) ، والبيانات هي كائن قاموس (ربما يكون ترميز JSON الذي تم إرجاعه؟) ولكن هذه مجرد تخمينات.
يبدو أن المكان الوحيد الذي يحدث فيه GithubException في المصدر هو في Requester.py --- وهذا يميل إلى تأكيد تخميناتي.
هل يوجد في مكان ما في وثائق واجهة برمجة تطبيقات جيثب نفسها حيث يمكن للمرء أن يجد المفاتيح التي يتوقع المرء أن يجدها في كائن JSON ، أي في هذه الحالة "رسالة" و "أخطاء" ثم ضمن "أخطاء" و "حقل" و "كود" و "مورد"؟
من التخمين من التجربة والخطأ ، استقرت على رمز مثل هذا ، ولكن هذا يبدو "متسللاً - سأكون أكثر راحة إذا عرفت ما إذا كنت أفعل هذا بشكل صحيح ...
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...
هل أنا على الطريق الصحيح؟
لاحظ أن User @ jacquev6 تناول هذا جزئيًا في تعليق على المشكلة رقم 82.
هذا هو المسار الصحيح بالفعل. هنا بعض الملاحظات.
أنت محق بشأن status
و data
: إنها حالة HTTP وحمولة json التي تم فك تشفيرها. لقد فعلت ذلك بهذه الطريقة لأنه لم يكن لدي أي فكرة عن أنواع الأخطاء التي يمكن أن تحدث ، لذلك لم أتمكن من إنشاء خصائص محددة كما هو الحال في جميع الفئات الأخرى في PyGithub. (أعلم أن NamedUser
يحتوي دائمًا على name
، لكن لا توجد مثل هذه المعرفة حول الاستثناءات / الأخطاء)
لذلك ، عندما يعرض Github API v3 حالة HTTP أعلى من 400 ، أرفع GithubException
بهذه الحالة والحمولة.
عند التحقق من وثائق Github API v3 اليوم ، أرى بضع كلمات حول الأخطاء: http://developer.github.com/v3/#client -errors ولكن في الواقع هناك المزيد من الأخطاء المحتملة. على سبيل المثال ، أخطاء 404 للكائنات غير الموجودة ، و 401 للمصادقة السيئة ، وما إلى ذلك.
لذا ، ما يمكنني فعله الآن بعد أن عرفت الأخطاء أكثر قليلاً هو إنشاء فئات فرعية GithubException
، ورفعها عندما أرى نوعًا معينًا من الخطأ. سيسمح هذا للعميل بفئات خطأ معينة except
، والسماح للفئات الأخرى بالارتفاع في المكدس.
سأفعل ذلك في الإصدار 1.14.0 وأغتنم هذا كفرصة لتوثيقه في http://jacquev6.github.com/PyGithub/.
سأفعل ذلك في الفرع topic/SpecificExceptions
هذا يبدو رائعا. مرة أخرى ، شكرًا على كل عملك الشاق ، و
مهارات تصميم برامج ممتازة. كان المنتج غير عادي
مفيد ويسهل اكتشافه - ومعالجة ذلك سيجعل الأمر متساويًا
أفضل.
يوم الخميس ، 28 مارس 2013 الساعة 12:59 مساءً ، فنسنت جاك
إخطاراتgithub.com
سأفعل ذلك في موضوع الفرع / SpecificExcept ionshttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions
-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.
فيل كونراد ، محاضر (SOE) * ، قسم علوم الكمبيوتر
جامعة كاليفورنيا ، سانتا باربرا
موعد مشترك: كلية الدراسات الإبداعية (www.ccs.ucsb.edu)
* SOE: تعيين هيئة التدريس بجامعة كاليفورنيا ، بما يتوافق مع الرتبة والوظيفة
الأمن لأستاذ مشارك ثابت
شكرًا \ o / من الجيد دائمًا كسب عميل راضٍ!
نعم ، أعتقد أنني سأمنحك زيادة - ضعف الراتب الذي أدفعه لك
الآن. :-)
يوم الخميس ، 28 مارس 2013 الساعة 1:33 مساءً ، فنسنت جاك
إخطاراتgithub.com
شكرًا \ o / من الجيد دائمًا كسب عميل راضٍ!
-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.
فيل كونراد ، محاضر (SOE) * ، قسم علوم الكمبيوتر
جامعة كاليفورنيا ، سانتا باربرا
موعد مشترك: كلية الدراسات الإبداعية (www.ccs.ucsb.edu)
* SOE: تعيين هيئة التدريس بجامعة كاليفورنيا ، بما يتوافق مع الرتبة والوظيفة
الأمن لأستاذ مشارك ثابت
هوهو ، سيكون ذلك أكبر وأصغر زيادة على الإطلاق!
ملاحظة لنفسي:
تم تسليم جزء من هذه المشكلة في 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'
كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟
أهلا،
أحاول التقاط استثناء:github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}
الآن أحاول الوصول إليه مباشرة أتلقى الخطأ التالي:
AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'
كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟
NicoHood استخدم github.BadCredentialsException
- وهو أوضح من كود المصدر.
GithubException عبارة عن فئة بالإضافة إلى وحدة نمطية ، مسار الوحدة النمطية الكامل للفئة هو github.GithubException.GithubException ، والذي لا يمكنك استيراد BadCredentialsException منه. يتم تصدير جميع الاستثناءات عبر github ، لذا from github import BadCredentialsException
سيعمل بشكل جيد.
التعليق الأكثر فائدة
أهلا،
أحاول التقاط استثناء:
الآن أحاول الوصول إليه مباشرة أتلقى الخطأ التالي:
كيف يمكنني التعرف على هذا الاستثناء المحدد وليس فقط استثناء عام من githubex؟