自學python第三天之 異常處理彙總

2021-10-24 12:25:29 字數 4376 閱讀 8718

異常就是執行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常型別,某種錯誤引發對應的異常時,異常處理程式將被啟動,從而恢復程式的正常執行。

異常體系內部有層次關係,python異常體系中的部分關係如下所示:

檢測範圍

except exception[as reason]:

出現異常後的處理**

try 語句按照如下方式工作:

例子:

try:

f = open('test.txt')

print(f.read())

f.close()

except oserror:

print('開啟檔案出錯')

輸出:

開啟檔案出錯

例子:

try:

f = open('test.txt')

print(f.read())

f.close()

except oserror as error:

print('開啟檔案出錯\n原因是:' + str(error))

輸出:

開啟檔案出錯

原因是:[errno 2] no such file or directory: 'test.txt'

乙個try語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有乙個分支會被執行。

例子:

try:

int("abc")

s = 1 + '1'

f = open('test.txt')

print(f.read())

f.close()

except oserror as error:

print('開啟檔案出錯\n原因是:' + str(error))

except typeerror as error:

print('型別出錯\n原因是:' + str(error))

except valueerror as error:

print('數值出錯\n原因是:' + str(error))

輸出:

數值出錯

原因是:invalid literal for int() with base 10: 'abc'

例子:

dict1 = 

try:

x = dict1['y']

except lookuperror:

print('查詢錯誤')

except keyerror:

print('鍵錯誤')

else:

print(x)

輸出:

查詢錯誤
try-except-else語句嘗試查詢不在dict中的鍵值對,從而引發了異常。這一異常準確地說應屬於keyerror,但由於keyerrorlookuperror的子類,且將lookuperror置於keyerror之前,因此程式優先執行該except**塊。所以,使用多個except**塊時,必須堅持對其規範排序,要從最具針對性的異常到最通用的異常。

例子:

dict1 = 

try:

x = dict1['y']

except keyerror:

print('鍵錯誤')

except lookuperror:

print('查詢錯誤')

else:

print(x)

輸出:

鍵錯誤例子:乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個元組。

try:

s = 1 + '1'

int("abc")

f = open('test.txt')

print(f.read())

f.close()

except (oserror, typeerror, valueerror) as error:

print('出錯了!\n原因是:' + str(error))

輸出:

出錯了!

原因是:unsupported operand type(s) for +: 'int' and 'str'

try: 檢測範圍 except exception[as reason]: 出現異常後的處理** finally: 無論如何都會被執行的**

不管try子句裡面有沒有發生異常,finally子句都會執行。

例子:如果乙個異常在try子句裡被丟擲,而又沒有任何的except把它截住,那麼這個異常會在finally子句執行後被丟擲。

def divide(x, y):

try:

result = x / y

print("result is", result)

except zerodivisionerror:

print("division by zero!")

finally:

print("executing finally clause")

divide(2, 1)

# result is 2.0

# executing finally clause

divide(2, 0)

# division by zero!

# executing finally clause

divide("2", "1")

# executing finally clause

# typeerror: unsupported operand type(s) for /: 'str' and 'str'

輸出:

result is 2.0

executing finally clause

division by zero!

executing finally clause

如果在try子句執行時沒有發生異常,python將執行else語句後的語句。

try:

檢測範圍

except:

出現異常後的處理**

else:

如果沒有異常執行這塊**

使用except而不帶任何異常型別,這不是乙個很好的方式,我們不能通過該程式識別出具體的異常資訊,因為它捕獲所有的異常。

try: 檢測範圍 except(exception1[, exception2[,...exceptionn]]]): 發生以上多個異常中的乙個,執行這塊** else: 如果沒有異常執行這塊**

例子:

try:

fh = open("testfile.txt", "w")

fh.write("這是乙個測試檔案,用於測試異常!!")

except ioerror:

print("error: 沒有找到檔案或讀取檔案失敗")

else:

print("內容寫入檔案成功")

fh.close()

輸出:

內容寫入檔案成功
注意:else語句的存在必須以except語句的存在為前提,在沒有except語句的try語句中使用else語句,會引發語法錯誤。

python 使用raise語句丟擲乙個指定的異常。

try:

raise nameerror('hithere')

except nameerror:

print('an exception flew by!')

輸出:

an exception flew by!

自學python人臉識別 第三天

小白我今天學到了乙個跟人臉相關的東西了,而且搞了半天終於搞定了。我們先看看效果。這是原圖 這是執行過後的效果圖 對於小白我來說,感覺很酷,畢竟在自學的路上又更進了一步。接下來我們來看看是如何實現的,import cv2 像這裡的haarcascade frontalface default.xml和...

WebGL自學筆記第三天

建立緩衝區物件 gl.createbuffer 繫結緩衝區物件 gl.bindbuffer 將資料寫入緩衝區物件 gl.bufferdata 將緩衝區物件分配給乙個attribute變數 gl.vertexattribpointer 開啟attribute變數 gl.enablevertexattr...

自學php 第三天 讀寫檔案

這次的例子是把訂單的資料儲存起來,一般是用資料庫來進行資料的儲存最好,但是今天目的是為了學習讀寫檔案,所以這次把資料存在檔案裡。讀寫檔案有一般有三個步驟 1 開啟檔案。如果檔案不存在,需要先建立它。2 讀取 寫入資料。3 關閉檔案。1.使用fopen 開啟檔案。fp fopen document r...