19 異常處理

2022-07-08 11:33:13 字數 2830 閱讀 7652

1.異常處理

# 異常處理

"""程式錯誤分為兩種:

1.語法錯誤 : **沒有按照python規定的語法去寫,處理不了,重寫

2.異常錯誤 : 在**語法正確的基礎上,程式報錯就是異常錯誤

try...except..

把所有可能錯誤的**放到try**中

如果報錯,執行except**塊

所有異常類的父類 :baseexception

所有普通異常的父類 : exception

"""# 1.基本語法

try:

lst = [1,2,3]

print(lst[4])

except:

print("有錯誤")

# 2.帶有分支的異常處理

try:

lst = [1,2]

print(lst[4])

print(aa)

except indexerror:

print("索引錯誤")

except nameerror:

print("變數不存在")

except:

print("有錯誤")

# 3.stopiteration 捕捉到return返回值

def mygen():

yield 1

yield 2

return 888

gen = mygen()

try:

print(next(gen))

print(next(gen))

print(next(gen))

except stopiteration as e: #給類的物件起別名,e是物件

print(e,type(e)) #888 res = str(e)

print(res,type(res)) #888 res = eval(res)

print(res,type(res)) #888 # 4.其他異常處理寫法

# (1) try...except...else(二選一)

"""總結:

如果**正確,執行else分支

如果**有錯誤,執行except分支

"""try:

lst = [1,2,3]

print(lst[1])

except:

print("有錯誤")

else:

print("**正確")

# (2) try...finally...

"""總結:

無論**是否有錯誤,都執行finally**塊;

應用場景:

比如檔案操作,必須遇到close()才能儲存檔案;一旦出現異常,必須在最後執行一次close()

資料才能儲存到檔案中,把fp.close()**寫在finally**塊中

"""# (3) try ...except ... else ...finally..

print("<***************>")

try:

lst = [1,2,3]

print(lst[4])

except:

print("有異常錯誤")

else:

print("正確**")

finally:

print("無論怎樣,我的必須執行")

2.主動拋異常
# 主動拋異常 raise

"""語法:

raise + 異常錯誤類/異常錯誤類物件

所有異常類的父類 :baseexception

所有普通異常的父類 : exception

"""# 1.丟擲系統內建的異常錯誤類

# 簡寫:

try:

raise # runtimeerror

except:

print("出錯了")

# 完整寫法

try:

raise indexerror

except baseexception:

print("666")

# 2.自定義異常錯誤類

"""自定義異常錯誤類必須繼承baseexception,系統才認可"""

def return_errorinfo(n):

import sys

f = sys.exc_info()[2].tb_frame.f_back

if n==1:

return str(f.f_lineno) #返回當前行數

elif n == 2:

return f.f_code.co_filename #返回檔名

def get_info(n):

try:

raise

except:

# 接收錯誤資訊

return return_errorinfo(n)

class myerror(baseexception):

def __init__(self,code,msg,file,line):

self.code = code

self.msg = msg

self.file = file

self.line = line

def info(self):

for i in self.__dict__:

print(self.__dict__[i])

try:

raise myerror(404,"錯誤**",get_info(2),get_info(1))

except myerror as e: #e是myerror的物件

e.info()

19 異常處理

異常 描述assertionerror assert語句失敗 attributeerror 試圖訪問乙個物件沒有的屬性 ioerror 輸入輸出異常,基本是無法開啟檔案 importerror 無法引入模組或者包,基本是路徑問題 indentationerror 語法錯誤,沒有正確的對齊 index...

python 19 異常處理

什麼是異常處理?對於使用者輸入,不想讓使用者看見出錯資訊,對異常進行處理 異常處理的框架是什麼?try 可能出錯的程式1 可能出錯的程式2 程式1出錯了,不在執行程式2 except 錯誤 as e e接收出錯的值,想抓多個錯誤 錯誤1,錯誤2,建議用單獨乙個錯誤,多個錯誤處理原則上是統一處理錯誤。...

小白學 Python(19) 基礎異常處理

人生苦短,我選python 前文傳送門 小白學 python 1 開篇 小白學 python 2 基礎資料型別 上 小白學 python 3 基礎資料型別 下 小白學 python 4 變數基礎操作 小白學 python 5 基礎運算子 上 小白學 python 6 基礎運算子 下 小白學 pyth...