Python-35章 異常處理

#執行程序

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("出錯了")
# 輸出:出錯了 但是此時只能看到出錯了,看不到哪一行什麼錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章