俗話說,天有不測風雲,我們在寫程序的時候不可能是一帆風順的,經常會出現一些異常的情況,例如我們準備要出門看一場電影,首先是出門,然後步行到電影院,之後看完電影去逛街,逛完街步行返回家中,但是當我們看完電影之後發現外面在下雨,這時候我們就要取消後面逛街的計劃返回家中,這裡的下雨就是異常情況,所以我們在程序設計的時候應當添加這種處理異常的方案。
下面我們先來看一個異常問題,程式碼如下:
number=int(input('請輸入一個數字:'))if15/number>=3:print('ok')else:print('wrong')
輸出結果:
請輸入一個數字:3ok請輸入一個數字:15wrong請輸入一個數字:0Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>if15/number>=3:ZeroDivisionError:divisionbyzero
當我們輸入的分母為0的時候,我們會發現程式報錯了,這表示我們寫的程式有問題,由於我們沒有考慮到分母為0的時候該怎麼處理,因此程式出現了異常,所以我們寫程序的時候需要考慮一些會出現的異常情況,下面我們來學習幾種常見的異常情況。
這是存取字典的鍵,鍵值不存在的時候發生的異常。
程式碼如下:
my_dict={'dotcpp':123}print(my_dict['dot'])
異常如下:
Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>print(my_dict['dot'])KeyError:'dot'
這種異常在我們學習Python的時候比較常見,當我們訪問序列元素的時候,索引值超出範圍的時候會觸發這種異常機制,程式碼如下:
my_list=[1,2,3,4,5]print(my_list[100])
異常如下:
Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>print(my_list[100])IndexError:listindexoutofrange
我們的清單中只存在5個元素,存取超出限制就會引發這種異常。
當我們使用一個未定義的變數時會引發此異常,程式碼如下:
name=['www.dotcpp,com']print('存在的變數name:',name)print('不存在的變數dotcpp:',dotcpp)
異常如下:
存在的變數name:['www.dotcpp,com']Traceback(mostrecentcalllast):FileC:/Users/輕煙/PycharmProjects/untitled1/teach/test.py,line3,in<module>print('不存在的變數dotcpp:',dotcpp)NameError:name'dotcpp'isnotdefined
這種異常出現於傳遞的資料與規定的類型不一致的時候,例如當我們要使用兩個整數相加減,這個時候其中一個使用了字串類型,那麼就會引發這種錯誤。
程式碼如下:
a=10b='dotcpp'print(a+b)
異常如下:
Traceback(mostrecentcalllast):FileC:/Users/test.py,line3,in<module>print(a+b)TypeError:unsupportedoperandtype(s)for+:'int'and'str'
上面是幾種最常見的異常,我們在學習的過程中可能會遇到ValueError、OSError、AttributeError等多種異常,我們在遇到不認識的異常的時候可以透過幫助文件去查詢相關內容。