天天看點

異常的概念 | 手把手教你入門Python之七十六

上一篇: 序列化和反序列化 | 手把手教你入門Python之七十五 下一篇: 面向對象案例練習 | 手把手教你入門Python之七十七 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

異常的概念

程式在運⾏過程中,由于我們的編碼不規範,或者其他原因⼀些客觀原因,導緻我們的程式⽆法繼續運⾏,此時,程式就會出現異常。如果我們不對異常進⾏處理,程式可能會由于異常直接中斷掉。為了保證程式的健壯性,我們在程式設計⾥提出了異常處理這個概念。

讀取檔案異常

在讀取⼀個檔案時,如果這個檔案不存在,則會報出

FileNotFoundError

錯誤。

異常的概念 | 手把手教你入門Python之七十六

除數為零異常

出現

ZeroDivisionError

異常

異常的概念 | 手把手教你入門Python之七十六

程式在運⾏過程中會經常遇到類似的異常,如果我們不進⾏處理,此時程式就會中斷并退出。為了提⾼程式的健壯性,我們可以使⽤異常處理機制來解決程式運⾏過程中可能出現的問題。

try...except語句

try...except語句可以對代碼運⾏過程中可能出現的異常進⾏處理。 文法結構:

try:
    可能會出現異常的代碼塊
except 異常的類型:
    出現異常以後的處理語句           

示例:

try:
    f = open('test.txt', 'r')
    print(f.read())
except FileNotFoundError:
    print('⽂件沒有找到,請檢查⽂件名稱是否正确')           

try...else語句

咱們應該對else并不陌⽣,在if中,它的作⽤是當條件不滿⾜時執⾏的實⾏;同樣在try...except...中也是如此,即如果沒有捕獲到異常,那麼就執⾏else中的事情

def div(a, b):
    return a / b

try:
    x = div(5 / 0)
except Exception as e:
    print('程式出錯了!!!!')
else:
    print('計算的結果是', x)           

finally關鍵字的使用

file = open('../02-視訊/03-練習3.mp4', 'rb')

try:
    while True:
        content = file.read(1024)
        if not content:
            break
        print(content)
finally:   # 最終都會被執行的代碼
    print('檔案被關閉了')
    file.close()           

finally的注意事項:

def test(a, b):
    x = a + b
    return x   # 一旦return 就表示函數結束
    return 'hello'   # 這段代碼不會被執行,一般情況下,一個函數最多隻能執行一個return


def demo(a, b):
    try:
        x = a / b
    except ZeroDivisionError:
      return '除數不能為0'
    else:
        return x
    finally:
        return 'good'  # 如果函數裡有finally,finally的傳回值會覆寫之前的傳回值

print(demo(1, 2))  # 0.5
# print(demo(1, 0))  # 除數不能為0,None           

try..finally語句

try...finally...語句⽤來表達這樣的情況:

在程式中,如果⼀個段代碼必須要執⾏,即⽆論異常是否産⽣都要執⾏,那麼此時就需要使⽤finally。⽐如⽂件關閉,釋放鎖,把資料庫連接配接返還給連接配接池等。
try:
    f = open('test.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
                print(content)
    except:
        #如果在讀取⽂件的過程中,産⽣了異常,那麼就會捕獲到
        #⽐如 按下了 ctrl+c
        pass
    finally:
        f.close()
        print('關閉⽂件')
except:
    print("沒有這個⽂件")           

說明:

我們可以觀察到KeyboardInterrupt異常被觸發,程式退出。但是在程式退出之前,finally從句仍然被執⾏,把⽂件關閉。

異常使用場景

解決輸入不是數字以及輸入年齡非整數的問題。

age  = input('請輸入您的年齡:')

try:
    age = float(age)
except ValueError as e:
    print('輸入的不是數字')
else:
    if age > 18:
        print('歡迎來到我的網站')
    else:
        print('未滿18歲,請自動離開')           

配套視訊