Python——raise引發異常


程序出現錯誤,會自動引發異常,Python也允許使用raise語句自行引發異常。

一、使用raise引發異常

單獨一個raise引發異常,默認引發RuntimeError異常,例:

try:
	print ('正在運行try塊...')
	raise
	print ('不再運行...')
except Exception as e:
	print ('正在運行except塊...')

# 運行結果
正在運行try塊...
正在運行except塊...

raise后帶一個異常類,引發指定異常類的默認實例,例:

def test():
	try:
		print ('正在運行try塊...')
		raise SyntaxError('引發指定異常...')
		print ('不再運行...')
	except TypeError as e:
		print ('對類型無效的操作...',e)
	except ValueError as e:
		print ('傳入無效的參數...',e)
	except SyntaxError as e:
		print ('語法錯誤...',e)

test()

# 運行結果
正在運行try塊...
語法錯誤... 引發指定異常...

二、自定義異常類

Python運行自定義異常類,自定義異常都應該繼承Exception基類或Exception的子類,自定義類大部分情況下都可以采用AuctionException.py類似的代碼來完成,只要改變AuctionException異常的類名即可(使類名更准確的描述該異常)。

自定義一個異常類,例:

class CustomException(Exception):
	pass

def test():
	try:
		raise CustomException
	except CustomException:
		print ('觸發異常...')

test()
# 運行結果
觸發異常...

三、except和raise組合使用

當出現一個異常時,單單靠一個方法無法完全處理該異常,必須使用幾個方法協作才能完全處理該異常時,就用到except塊結合raise語句來完成。

例:

# 自定義異常
class CustomException(Exception):
	pass

class Test:
	def custom(self):
		try:
			aaa
		except Exception as e:
			print ('出現異常:',e)
			raise CustomException('觸發自定義異常~')

def test():
	T = Test()
	try:
		T.custom()
	except CustomException as e:
		print ('test函數捕獲異常;',e)

test()
# 打印
出現異常: name 'aaa' is not defined
test函數捕獲異常; 觸發自定義異常~

  上面程序中,aaa觸發了NameError異常,執行Test類中的except塊,打印錯誤信息后,通知該方法調用者再次處理CustomException異常,所以custom()方法的調用者test()函數可以再次捕獲CustomException異常,把異常詳細信息打印出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM