Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah kaedah pengendalian pengecualian dalam tutorial asas Python?
Dalam Python
, gunakan objek pengecualian (exception object)
untuk mewakili situasi luar biasa yang berlaku semasa pelaksanaan kod Apabila program pelaksana terputus, pengecualian akan dilemparkan.
Jika pengecualian tidak dikendalikan dengan betul, larian akan ditamatkan.
Anda boleh bayangkan jika anda sedang membangunkan produk dan pengecualian berlaku dan anda tidak melaporkan punca pengecualian, ia akan menjadi sangat tidak selesa dan sukar untuk menyelesaikan masalah yang tidak normal.
Untuk meningkatkan kestabilan dan fleksibiliti produk, Python
menjalankan pembangun untuk menangkap dan mengendalikan pelbagai pengecualian umum ralat modul dalaman seperti KeyError异常类
adalah lebih biasa, dan sudah tentu terdapat banyak yang lain.
Untuk memberi anda pemahaman ringkas, Python membahagikan ralat pelaksanaan kod kepada dua kategori: ralat sintaks (syntax error)
dan pengecualian (exception)
.
Pertama sekali, terdapat masalah kesalahan tatabahasa. Ia dapat dilihat daripada perkataan bahawa ralat penghuraian kod adalah salah.
Ralat jenis ini biasanya berlaku di kalangan pemula Sebab utama ialah kod yang dilaksanakan tidak mematuhi spesifikasi sintaks Python, jadi ralat sintaks akan dilaporkan dan kod akan berhenti.
Contoh ralat diberikan di bawah:
>>> if for not in list(1,2,3,4) File "<stdin>", line 1 if for not in list(1,2,3,4) ^ SyntaxError: invalid syntax
Daripada laporan ralat di atas, kita boleh tahu bahawa ia adalah ralat sintaks dan sintaks tidak sah. Dan menunjukkan bahawa ralat berada dalam kedudukan for
Jelas sekali, if
dan for
tidak boleh digunakan bersama.
Pengecualian ialah ralat yang ditemui semasa pelaksanaan kod Sukar untuk mencarinya terlebih dahulu Walaupun kod itu ditulis dengan cara yang sangat standard, pengecualian pelaksanaan mungkin berlaku .
Contoh ralat diberikan di bawah. Dalam operasi matematik, masalah yang sering dibincangkan ialah kes pembahagian dengan sifar. Walau bagaimanapun, 0 tidak dibenarkan sebagai pembahagi kerana ia akan menyebabkan pengecualian.
>>> a = 5 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero
Jelas sekali mesej ralat menunjukkan bahawa 0 adalah tidak betul sebagai pembahagi.
Selepas kami memahami ralat dan pengecualian, kami perlu mengendalikan pengecualian. Masalah seperti kesalahan tatabahasa boleh dielakkan dengan berlatih lebih banyak Untuk pengecualian kedua, python
menyediakan pernyataan try-except
untuk mengendalikannya.
Untuk penjelasan yang lebih jelas, mari kita ambil kes di atas di mana pembahagi adalah 0 sebagai contoh Kami menangkap dan mengendalikan pengecualian dengan menambah pernyataan try-except
:
def division(x, y): try: return x / y except ZeroDivisionError: print("0不能作为除数!!!")
Kemudian kami memanggilnya. terminal Fungsi cuba:
division(x=1, y=0)
Output:
0 tidak boleh digunakan sebagai pembahagi! ! !
Walaupun input kami salah dan secara teorinya harus melaporkan ralat, tiada ralat dilaporkan dan perenggan dikembalikan.
Yang berikut menerangkan cara penyataan try-except
berfungsi:
Kod dalam Try-except akan dilaksanakan seperti biasa
Jika tiada pengecualian berlaku, langkau blok kod except dan tamatkan try-except
Jika pengecualian masalah berlaku dalam baris kod tertentu dalam try-except, kod yang tinggal akan berhenti melaksanakan. Jika Jika pengecualian adalah konsisten dengan apa yang dinyatakan dalam except, blok kod dalam except dilaksanakan, dan pengendalian pengecualian akan berakhir. tidak sepadan dengan apa yang dinyatakan dalam kecuali, kemudian Lompat keluar dari pernyataan cuba, program terus membuang pengecualian dan menamatkan pelaksanaan kod
Sudah tentu, kod yang kita tulis mungkin mempunyai berbilang pengecualian, jadi kita boleh menulis semua pengecualian dalam Dalam blok pernyataan kecuali, pelaksanaan khusus adalah seperti berikut:
except (RuntimeError, TypeError, NameError):pass
def passpass(x=1): try: return print(x+x) except (RuntimeError, TypeError, NameError): pass except TypeError: print('参数错误啦~') except NameError: print('名称错误啦~')
except
Saya akan mengemas kini di sini hari ini dan saya akan mengemas kini esok . Mari pergi lompat tali , Hei, gulung gulung setiap hari, gulung ayam Beijing lama ~ (2022.4.20)
Jenis pengecualian Python boleh diwarisi di sini jika dinyatakan selepas itu kecuali Pengecualian mewarisi daripada pengecualian sebelumnya, jadi pengecualian berikutnya juga akan ditangkap Contohnya:Aclass A(Exception): pass class B(A): pass class C(B): pass for cls in [A, B, C]: try: raise cls() except C: print('C') except B: print('B') except A: print('A')akan mengeluarkan:
B
C<. . output adalah semua a:>A
AA
Jika semua pengecualian diekstrak satu demi satu, ini akan menjadi sangat menyusahkan, Pada masa ini , anda tidak boleh menetapkan jenis pengecualian dalam kecuali yang terakhir, supaya semua pengecualian yang masih belum ditangkap akan ditangkap:
class A(Exception): pass class B(A): pass class C(B): pass for cls in [A, B, C]: try: raise cls() except A: print('A') except B: print('B') except C: print('C')
Fungsi penting: else.
pernyataan lain ialah Ia digunakan untuk melaksanakan beberapa operasi tambahan. Contohnya, beberapa operasi fail dilakukan dalam blok kod cubaan boleh dikeluarkan dalam lain Format sintaks adalah seperti berikut:def passpass(x=1): try: return print(x/x) except TypeError: print('参数错误啦~') except NameError: print('名称错误啦~') except: print('报错啦~自己查')Sudah tentu, kami juga boleh mengendalikan pengecualian. seperti berikut:
try: pass except: pass else: pass
Lemparkan pengecualian secara bebas
Dalam beberapa situasi biasa, pembangun tidak membuat ralat pelaksanaan, tetapi mereka tidak mematuhi logik reka bentuk, oleh itu, pembangun perlu secara aktif membuang pengecualian. Dalam kes ini, kita perlu menggunakan pernyataan raise Throw exception:
def passpass(x=1): try: return print(x/x) except TypeError as error: print('参数错误啦~', error) except NameError: print('名称错误啦~') except: print('报错啦~自己查')
Pengecualian tersuai
Apabila pengecualian terbina dalam Python tidak dapat memenuhi keperluan pembangunan, anda boleh menyesuaikan pengecualian.
自定义异常类必须要直接或间接继承自Exception类。尽管自定义异常类与其他类具有相同的功能,但为保持简洁,应该仅提高必要的属性。
class Error(Exception): """Base class for exception in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the winerror """ def __init__(self, expression, message): self.expression = expression self.message = message
else在代码正常执行后才会被执行的代码块,但有些情况无论代码块是否出现异常都要执行,则需要用到finally语句:
def passpass(x=1): try: return print(x/x) except TypeError as error: print('参数错误啦~', error) except NameError: print('名称错误啦~') except: print('报错啦~自己查') finally: print('运算结束~')
Atas ialah kandungan terperinci Apakah kaedah pengendalian pengecualian dalam tutorial asas Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!