Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kaedah pengendalian pengecualian dalam tutorial asas Python?

Apakah kaedah pengendalian pengecualian dalam tutorial asas Python?

WBOY
WBOYke hadapan
2023-05-27 21:24:521636semak imbas

Pengecualian

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.

Ralat dan pengecualian

Untuk memberi anda pemahaman ringkas, Python membahagikan ralat pelaksanaan kod kepada dua kategori: ralat sintaks (syntax error) dan pengecualian (exception).

Kesilapan tatabahasa

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

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.

Pengendalian Pengecualian

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:

  1. Kod dalam Try-except akan dilaksanakan seperti biasa

  2. Jika tiada pengecualian berlaku, langkau blok kod except dan tamatkan try-except

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

  4. 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
  5. Jika sebarang ungkapan pengecualian dalam senarai pengecualian ditangkap, ia akan memasuki pemprosesan
.

Sudah tentu, jika anda ingin mengendalikan setiap pengecualian secara individu, anda juga boleh mengendalikannya satu demi satu:

def passpass(x=1):
	try:
		return print(x+x)
	except (RuntimeError, TypeError, NameError):
		pass
	except TypeError:
		print('参数错误啦~')
	except NameError:
		print('名称错误啦~')
exceptSaya 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:

class 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:

A

B

C
<. . output adalah semua a:>

AA
A

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

finally子句

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam