python 處理異常的方法(Python自學從入門到實踐)
2023-04-20 09:48:09 1
在Python中導致程序無法運行的有2種情況。
1;語法錯誤,這是致命錯誤,需要重新查看代碼進行修改,比如:縮進問題,比如關鍵字錯誤。
2;程序異常,這不是致命錯誤,我們可以捕獲它。
在Python中處理異常是用try - except代碼代碼塊來處理的。
學習這章的目的是:告訴Python發生異常時怎麼辦。使用try-except代碼塊後,即便出現異常,程序也將繼續運行:我們可以編寫的友好的錯誤消息,而不是令用戶迷惑的traceback。
舉個例子:
zeroDivisionError: integer division or modulo by zero
大概意思是說;除數不能為0.
如何通過try - except,捕獲這個異常,並且不會出現程序異常呢?
def ceshi(a,b): return a//bb=int(input('請輸入一個除數:'))a=int(input('請輸入一個被除數:'))try: print(ceshi(a,b))except ZeroDivisionError: print('除數不能為0')
這樣來看,就算除數輸入0,也不會出現異常,不過還有一個問題,就是程序結束了,應該要讓用戶知道不能輸入0之後,能輸入其他數才對。加入一個while循環 和 退出條件完善一下:
def ceshi(a,b): return a//bwhile True: b = input('請輸入一個除數:') if b =='退出': break else: a = int(input('請輸入一個被除數:')) b = int(b) try: print(ceshi(a,b)) except ZeroDivisionError: print('除數不能為0')
現在需要思考另外一個問題了,就是except 後面到底應該跟什麼內容呢?我發現後面可以跟很多內容,都是大寫字母開頭的,我們可能需要記得少部分,但不需要全部去記憶,可以當發生異常的時候,把異常的第一段加入進去 即可。再看一個例子:
我想讀取一個不存在的文件,Python拋出了異常:FileNotFoundError。現在我可以利用這個異常,捕獲它,然後提醒用戶;
FileNotFoundError。現在我可以利用這個異常,捕獲它,然後提醒用戶;
dizhi ="/Users/xuxizhi/Desktop/Python523.txt"try: with open(dizhi,'r',encoding='utf-8')as a: a.write('我想用只讀的方式打開這個文件,但現在這個文件不存在,應該會出現異常')except FileNotFoundError: print(f"提醒~提醒~{dizhi}不存在,無法讀取")
那是不是任何的異常都可以捕獲呢?我們多試試。
異常的開頭是:ValueError 我們來試試捕獲它。
在實際運用中,客戶的輸入總是會出現奇怪的情況,為了讓程序正常運行,我們需要捕獲異常,並且告知客戶應該怎麼輸入才正確,這樣可以給到客戶良好的體驗。
來看下面的案例,比較兩個數的大小:1;要求客戶輸入的是數值,2;並且限定了輸入數值的範圍(這僅僅是我做試驗用的方法)
def ceshi(a, b): if a > b: return f"{a}比{b}大" else: return f"{a}比{b}小"while True: try: a = int(input('請輸入數值a:')) except ValueError: print('只能輸入數值哈 輸入其他都沒有用') else: if a > 10: print('填入的數值不能大於10') continue else: print('輸入正確') breakwhile True: try: b = int(input('請輸入數值b:')) except ValueError: print('只能輸入數值哈 輸入其他都沒有用') else: if b > 10: print('填入的數值不能大於10') continue else: print('輸入正確') breakprint(ceshi(a, b))
我們需要學會這種方法,其目的是讓程序能夠正常運行並給客戶良好的體驗,同時也加深我們對可能發生的所有情況都計算在內。
,