1. 程式人生 > 其它 >異常處理.12.11部落格

異常處理.12.11部落格

技術標籤:python

異常處理語句

程式開發時,有時會產生一些錯誤,如果輸入的資料符合要求,程式就可以正常執行,否則就將丟擲異常並停止執行。此時就需要異常處理語句。
python常見的異常,瞭解即可

異常描述
Name Error嘗試訪問一個沒有宣告的變數引發的錯誤
IndexError索引超出序列範圍引發的錯誤
-IndentationError--縮排錯誤-
KeyError請求一個不存在的字典關鍵字引發的錯誤
IOError輸入輸出錯誤(如要讀取的檔案不存在)
-ImportError--當import語句無法找到模組或from無法在模組中找到相應的名稱時引發的錯誤-
Attribute Error嘗試訪問未知的物件屬性引發的錯誤
TypeError型別不適合引發的錯誤
-MemoryError--記憶體不足-
ZeroDivisionError除數為0引發的錯誤

try…except語句
如分蘋果,我都知道0不能做除數,如果輸入孩子數為0時會報錯,

def division():
	"""功能:分蘋果"""
	print("==========分蘋果==========")	
	apple = int(input("請輸入蘋果個數:"))
	children = int(input("輸入小朋友個數:"))
	result = apple//children
	remain = apple - result*children
	if remain > 0:
		print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個,"
		"剩下",remain,"個")
	else:
		print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個")


if__mane__=='__main__':
	try:
		division()
	except ZeroDivisionError:
		print("\n出錯了 ~_~ ---蘋果不能被0個學生平分")

這樣再次執行程式時,這樣在輸入學生數為0時就不再報錯

通常需要處理多個異常也可以用下面程式碼實現

if __name__ == '__main__':
	try:
		division()
	except ZeroDivisionError:
		print("\n出錯了 ~_~ ---蘋果不能被0個學生平分")
	except ValueError as e:
		print("輸入錯誤",e)

或者

try:
	division()
except (ValueError,ZeroDivisionError) as e:
	print("出現錯誤:",e)

try…except…else
該語句中的內容發現異常時else將不被執行,當沒有異常丟擲時,將輸出else的內容

try:
	division()
except (ValueError,ZeroDivisionError) as e:
	print("出現錯誤:",e)
else:
	print("分蘋果完成")   #沒有異常時執行

try…except…finally
無論有無異常,finally程式碼塊中的程式碼都會被執行。

try:
	division()
except (ValueError,ZeroDivisionError) as e:
	print("出現錯誤:",e)
else:
	print("分蘋果完成")   #沒有異常時執行
finally:
	print("進行一次分蘋果的操作。")  #無論有無異常都會執行

在這裡插入圖片描述
使用raise語句丟擲異常
依舊分蘋果,如果10個孩子,5個蘋果,顯然蘋果不夠分,但卻沒有出現異常,此時就需要raise丟擲一個與實際不符的異常

def division():
	"""功能:分蘋果"""
	print("==========分蘋果==========")	
	apple = int(input("請輸入蘋果個數:"))
	children = int(input("輸入小朋友個數:"))
	if apple<children:
		raise ValueError("蘋果太少不夠分")    #手動定義一個異常
	result = apple//children
	remain = apple - result*children
	if remain > 0:
		print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個,"
		"剩下",remain,"個")
	else:
		print(apple,"個蘋果,平均分給",children,"個小朋友,每人分",result,"個")