Python中的異常處理學習筆記

2022-09-28 08:57:07 字數 2891 閱讀 5222

python 是物件導向的語言,所以程式丟擲的異常也是類。

常見的異常類

1.nameerror:嘗試訪問乙個沒有申明的變數

2.zerodivisionerror:除數為 0

3.syntaxerror:語法錯誤

4.indexerror:索引超出序列範圍

5.keyerror:請求乙個不存在的字典關鍵字

6.ioerror:輸入輸出錯誤(比如你要讀的檔案不存在)

7.attributeerror:嘗試訪問未知的物件屬性

8.typeerror:傳給函式的引數型別不正確,比如給 int 函式傳入字元型

自定義異常類

儘管內建的異常類已經包括大部分情況,但如果需要建立自己的異常類,可以採用下面的方法:

複製** **如下:

class customexception(exception): # exception 為所有異常的基類

# 處理異常的**

捕獲異常

複製** **如下:

try: 

# 需要進行捕獲異常的**,只有出現異常之前的**被最終執行

except (exception1,exception2,...) as argument: 

# 捕獲到 (exception1,exception2,...) 裡的異常才執行本段**

# argument 是乙個異常類的例項,包含異常的具體資訊

except:

# 捕獲到 (exception1,exception2,...) 以外的異常執行本段**,用 sys 模組的 exc_info() 函式可以獲取異常資訊

else: 

# 如果沒有捕獲到異常則執行本段**

finally: 

# 無論是否捕獲到異常都執行本段**

上述語句並不都是必須的,譬如 try...except...、try...finally... 或者 try...except...else... 語句都是可行的。我們還可以 用 try...except...else... 代替 if...else...。

丟擲異常

如果我們想要在自己編寫的程式中主動丟擲異常,可以採用如下兩種方法:

raise exception(reason)

exception 必須是乙個異常類的名稱。可選項 reason 用來傳遞異常的資訊。

assert expression[,reason]

assert 是斷言的關鍵字。當表示式 expression 為真則什麼都不做,否則丟擲 assertionerror 異常。reason 提供異常的資訊。

上下文管理器

由於物件 file 支援上下文管理協議,因此可以採程式設計客棧用下面的方法開啟檔案:

複製** **如下:

with open('filename') as fp:

# 無論本段**是否出現異常,檔案物件 fp 均能正確關閉

example

複製** **如下:

import sys

def div(num, den):

pr程式設計客棧int('_________________   (',num,',',den,')\n')

try:

ans = num/den

assert den != num, 'equal' # 斷言:分子分母不相等

den = 'changed'            # 如果執行本語句之前未出現異常,改變 den 的值

if num % 2:                # 如果分子為奇數,則丟擲異常

raise valueerror('odd')

except zerodivisionerror as e:

print('except ... as ...\n\t', e)

except:

print('except\n\t', sys.exc_info())

else:

print('else\n\t', ans)

finally:

print('finally\n\t', den)

div(1,0) # 除數為零,為 zerodivisionerror 異常類

div(1,1) # 分子等於分母,斷言為假,丟擲異常

div(2,1) # 無異常

div(3,1) # 分子為奇數,通過 raise 丟擲異常

div(3,'x') # 不屬於 zerodivisionerror 的其他異常

執行結果:

複製** **如下:

_________________   ( 1 , 0 )

except ... as ...

division by zero

finally

0_________________   ( 1 , 1 )

except

(, assertionerror('equal',), )

finally

1_________________   ( 2 , 1 )

else

2.0finally

changed

_________________   ( 3 , 1 )

except

(, valueerror('odd',), )

finally

changed

_________________   ( 3 , x )

except

(, typeerror("unsupported operand type(s) for /: 'int' and 'str'",), )

finally

x

本文標題: python中的異常處理學習筆記

本文位址: /jiaoben/python/119125.html

Python程式設計入門 第9章 異常處理 學習筆記

一 異常 異常是一種特殊的錯誤物件,可以捕獲並檢查它們,以決定如何處理錯誤。出現異常後,如果不捕獲或以其他方式處理,python將立即停止執行程式,並顯示棧跟蹤 異常發生前呼叫的函式清單 一 引發異常 python內建函式和庫函式通常在出現意外情況時引發異常。如 除以零將丟擲異常 1 0 trace...

異常處理學習

1 異常的使用場合 1 應用程式 2 庫 最好不要捕獲異常,除非某個異常表示的是 可以處理的情況 但要假定呼叫 可以處理他們。2 net 執行時可以把整個程式放在另乙個更大的 try塊中,如果發生的異常 沒有處理,程式流就會退出程式,由 net 執行時中的 catch 塊捕獲它。會導致程式執行中斷,...

異常處理學習筆記

arm處理器的工作模式 使用者模式user 快速中斷模式fiq 處部中斷模式irq 特權模式supervisor 資料訪問中止模式abort 未定義指令中止模式undefined 系統模式system 1一上電,cpu處於 supervisor svc 管理模式 2發生中斷,cpu進入 riq 外部...