在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//b
b=int(input('請輸入一個除數:'))
a=int(input('請輸入一個被除數:'))
try:
print(ceshi(a,b))
except ZeroDivisionError:
print('除數不能為0')
這樣來看,就算除數輸入0,也不會出現異常,不過還有一個問題,就是程序結束了,應該要讓用戶知道不能輸入0之後,能輸入其他數才對。加入一個while循環 和 退出條件完善一下:
def ceshi(a,b):
return a//b
while 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('輸入正确')
break
while True:
try:
b = int(input('請輸入數值b:'))
except ValueError:
print('隻能輸入數值哈 輸入其他都沒有用')
else:
if b > 10:
print('填入的數值不能大于10')
continue
else:
print('輸入正确')
break
print(ceshi(a, b))
我們需要學會這種方法,其目的是讓程序能夠正常運行并給客戶良好的體驗,同時也加深我們對可能發生的所有情況都計算在内。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!