#執行程序
print(1/0)
#報錯
Traceback (most recent call last):
File "I:/python文件/python入門/week3/異常處理.py", line 6, in <module>
print(1/0)
ZeroDivisionError: division by zero
try…
#當程序執行時遇到錯誤,系統就會拋出異常,
#處理異常:在Python中通過try...except來處理錯誤
try:
print(1/0)
except ZeroDivisionError:
print("出錯了")
# 輸出:出錯了
print("嗯哼")
此時程序遇到錯誤也可以正常向下執行,並且拋出一個你指定的錯誤
exception
exception:把所有的錯誤,都幫你處理了
try :
print(1/10)
f = open("xxx",mode = 'r')
except Exception:
print("出錯了")
#不同的問題不同的拋異常
try :
print(1/10)
f = open("xxx",mode = 'r')
except ZeroDivisionError:
print("錯誤:print")
except FileExistsError:
print("錯誤:文件不存在")
但是,當try裏面的遇到錯誤,就會直接跳過下面的直接執行except,剩下的不執行
所以,一般最後寫一個Exception用來兜底
try :
print(1/10)
f = open("xxx",mode = 'r')
except ZeroDivisionError:
print("錯誤:print")
except FileExistsError:
print("錯誤:文件不存在")
else:
# 當try中代碼不出錯的時候,自動執行裏面的內容
pass
finally:
#不管執行處不出錯,最終都要走finally,一般用來收尾
pass
# 如何手動拋出異常
def cul(a,b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
return a + b
else:
raise Exception("不能處理")
#如何自己定義異常
#隨便寫一個類,類只要繼承了Exception 這就是一個異常類,就能作爲raise的對象
class baoException(Exception):
pass
def cul(a,b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
return a + b
else:
raise baoException("不能處理")
cul("就不放",3)
#輸出:__main__.baoException: 不能處理
#baoException可以被自己定義,但是要直觀,見名知其義
class baoException(Exception):
pass
def cul(a,b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
return a + b
else:
raise baoException("不能處理")
try:
cul("就不放",3)
except baoException:
print("出錯了")
# 輸出:出錯了 但是此時只能看到出錯了,看不到哪一行什麼錯誤
堆棧信息
#堆棧信息 導入模塊
import traceback
class baoException(Exception):
pass
def cul(a,b):
if (type(a) == int or type(a) == float) and (type(b) == int or type(b)):
return a + b
else:
raise baoException("不能處理")
try:
cul("就不放",3)
except baoException:
ret = traceback.format_exc() #查看堆棧信息
print(ret) #輸出堆棧信息
print("出錯了")
# 輸出:出錯了 但是此時只能看到出錯了,看不到哪一行什麼錯誤