上一篇: 序列化和反序列化 | 手把手教你入門Python之七十五 下一篇: 面向對象案例練習 | 手把手教你入門Python之七十七 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。
異常的概念
程式在運⾏過程中,由于我們的編碼不規範,或者其他原因⼀些客觀原因,導緻我們的程式⽆法繼續運⾏,此時,程式就會出現異常。如果我們不對異常進⾏處理,程式可能會由于異常直接中斷掉。為了保證程式的健壯性,我們在程式設計⾥提出了異常處理這個概念。
讀取檔案異常
在讀取⼀個檔案時,如果這個檔案不存在,則會報出
FileNotFoundError
錯誤。

除數為零異常
出現
ZeroDivisionError
異常
程式在運⾏過程中會經常遇到類似的異常,如果我們不進⾏處理,此時程式就會中斷并退出。為了提⾼程式的健壯性,我們可以使⽤異常處理機制來解決程式運⾏過程中可能出現的問題。
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歲,請自動離開')