Pygithub: Cara bekerja dengan objek GithubException

Dibuat pada 28 Mar 2013  ·  14Komentar  ·  Sumber: PyGithub/PyGithub

Saya punya pertanyaan tentang bagaimana bekerja dengan objek GithubException

Kode sampel:
mencoba:
team = org.create_team (teamName,
[],
"Dorong");
kecuali GithubException sebagai e:
cetak (e)

Ketika saya mencetak (e) saya mendapatkan:

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

Yang ingin saya lakukan adalah melihat daftar atribut dan fungsi anggota dari objek GithubException sehingga saya dapat menarik berbagai hal untuk diperiksa untuk peristiwa tertentu ... tetapi saya tidak dapat menemukannya di dokumentasi untuk API PyGithub. Mungkin saya hanya perlu memahami lebih baik hubungan antara PyGithub API dan github RESTful API yang mendasarinya.

Dari sumbernya, terlihat ada dua properti dari objek GithubException:

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

data

dan menggabungkannya dengan output, tampaknya 422 adalah status (mungkin dikembalikan oleh API?), dan datanya adalah objek kamus (mungkin pengkodean JSON yang dikembalikan?) tetapi ini hanya tebakan.

Tampaknya satu-satunya tempat GithubException terjadi di sumbernya adalah di Requester.py --- dan ini cenderung mengkonfirmasi tebakan saya.

Apakah ada di suatu tempat dalam dokumentasi untuk github API itu sendiri di mana seseorang dapat menemukan kunci yang diharapkan dapat ditemukan di objek JSON, yaitu dalam hal ini "pesan", "kesalahan", dan kemudian dalam "kesalahan", "bidang" , "kode", "dan" sumber daya "?

Dari tebakan coba-coba, saya menetapkan kode seperti ini, tetapi ini terasa "hacky --- saya akan lebih nyaman jika saya tahu apakah saya melakukan ini dengan benar ...

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...

Apakah saya di jalur yang benar?

question

Komentar yang paling membantu

Hai,
Saya mencoba menangkap pengecualian:

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

Sekarang saya mencoba mengaksesnya secara langsung saya mendapatkan kesalahan berikut:

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

Bagaimana saya bisa menangkap pengecualian khusus ini dan bukan hanya githubexception umum?

Semua 14 komentar

Perhatikan bahwa Pengguna @ jacquev6 membahas sebagian ini dalam komentar pada masalah # 82.

Ini memang jalur yang benar. Berikut beberapa komentarnya.

Anda benar tentang status dan data : mereka berstatus HTTP dan muatan json yang diterjemahkan. Saya melakukannya dengan cara ini karena saya tidak tahu jenis kesalahan yang dapat terjadi, jadi saya tidak dapat membuat properti khusus seperti di semua kelas lain di PyGithub. (Saya tahu bahwa NamedUser selalu memiliki name , tetapi tidak ada pengetahuan tentang pengecualian / kesalahan)

Jadi, setiap kali Github API v3 mengembalikan status HTTP di atas 400, saya mengumpulkan GithubException dengan status ini dan muatannya.

Saat memeriksa dokumentasi Github API v3 hari ini, saya melihat beberapa kata tentang kesalahan: http://developer.github.com/v3/#client -errors tetapi sebenarnya ada lebih banyak kemungkinan kesalahan. Misalnya, kesalahan 404 untuk objek yang tidak ada, 401 untuk otentikasi yang buruk, dll.

Jadi, apa yang dapat saya lakukan sekarang setelah mengetahui kesalahannya sedikit lebih banyak adalah membuat sub-kelas GithubException , dan meningkatkannya ketika saya melihat jenis kesalahan tertentu. Ini akan memungkinkan klien untuk except kelas kesalahan tertentu, dan membiarkan kelas lain naik tumpukan.

Saya akan melakukannya di versi 1.14.0 dan menganggap ini sebagai kesempatan untuk mendokumentasikannya di http://jacquev6.github.com/PyGithub/.

Saya akan melakukannya di cabang topic/SpecificExceptions

Kedengarannya bagus. Sekali lagi, terima kasih atas semua kerja keras Anda, dan
keterampilan desain perangkat lunak yang sangat baik. Produknya luar biasa
berguna dan mudah dipahami --- dan menangani hal ini akan membuatnya seimbang
lebih baik.

Pada hari Kamis, 28 Maret 2013 jam 12.59, Vincent Jacques
[email protected] :

Saya akan melakukannya di topik cabang / ion SpecificExcepthttps

-
Balas email ini secara langsung atau lihat di Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

Phill Conrad, Dosen (BUMN) *, Jurusan Ilmu Komputer
Universitas California, Santa Barbara
Penunjukan Bersama: College of Creative Studies (www.ccs.ucsb.edu)

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

* BUMN: pengangkatan fakultas pengajar UC, sesuai pangkat dan pekerjaan
keamanan kepada seorang profesor tetap

Terima kasih \ o / Mendengar klien yang puas itu selalu menyenangkan!

Ya, saya pikir saya akan memberi Anda kenaikan --- dua kali lipat gaji yang saya bayarkan kepada Anda
sekarang. :-)

Pada Kamis, 28 Maret 2013 pukul 13.33, Vincent Jacques
[email protected] :

Terima kasih \ o / Mendengar klien yang puas itu selalu menyenangkan!

-
Balas email ini secara langsung atau lihat di Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

Phill Conrad, Dosen (BUMN) *, Jurusan Ilmu Komputer
Universitas California, Santa Barbara
Penunjukan Bersama: College of Creative Studies (www.ccs.ucsb.edu)

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

* BUMN: pengangkatan fakultas pengajar UC, sesuai pangkat dan pekerjaan
keamanan kepada seorang profesor tetap

Huhu, itu akan menjadi kenaikan gaji terbesar dan terkecil saya!

Catatan untuk saya sendiri:

  • Periksa github.tests.Organization.testMembers tes: ada status 403
  • Tambahkan kasus uji untuk exn tertentu ketika autentikasi buruk dengan token

Sebagian dari masalah ini dikirimkan di 1.14.0, tetapi saya menyimpannya untuk versi 1.15.0 untuk menambahkan beberapa jenis pengecualian khusus lainnya.

Pengecualian khusus baru untuk dibuat: HTTP 403 "agen pengguna yang buruk" (lihat # 160)

Saya menutup masalah ini sekarang, tetapi saya akan terus menambahkan jenis pengecualian tertentu saat saya menemukannya.

Hai,
Saya mencoba menangkap pengecualian:

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

Sekarang saya mencoba mengaksesnya secara langsung saya mendapatkan kesalahan berikut:

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

Bagaimana saya bisa menangkap pengecualian khusus ini dan bukan hanya githubexception umum?

Hai,
Saya mencoba menangkap pengecualian:

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

Sekarang saya mencoba mengaksesnya secara langsung saya mendapatkan kesalahan berikut:

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

Bagaimana saya bisa menangkap pengecualian khusus ini dan bukan hanya githubexception umum?

@NicoHood menggunakan github.BadCredentialsException - yang lebih jelas dari kode sumber.

GithubException adalah kelas sekaligus modul, jalur modul lengkap ke kelas tersebut adalah github.GithubException.GithubException, tempat Anda tidak dapat mengimpor BadCredentialsException. Semua pengecualian diekspor melalui github, jadi from github import BadCredentialsException akan berfungsi dengan baik.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat