專題十一 異常處理(講義)-《Python程序設計》職教高考備考講練測_第1頁
專題十一 異常處理(講義)-《Python程序設計》職教高考備考講練測_第2頁
專題十一 異常處理(講義)-《Python程序設計》職教高考備考講練測_第3頁
專題十一 異常處理(講義)-《Python程序設計》職教高考備考講練測_第4頁
專題十一 異常處理(講義)-《Python程序設計》職教高考備考講練測_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

專題十一異常處理[考綱要求]1.熟記程序設計錯誤的分類2.了解Python中的異常3.了解Python的常規(guī)異常4.掌握Python的異常捕捉try…except5.掌握else子句的使用6.掌握finally子句的使用7.了解raise拋出異常[課時安排]2課時[知識梳理]在編寫程序時常常會犯錯。程序設計錯誤可以分為3類:語法錯誤、運行時錯誤和邏輯錯誤。如果解釋器檢測到錯誤時,會終止程序執(zhí)行并報告錯誤類型,這就是異常(Exception)。Python中有很有效的異常處理方法。Python中的異常語法錯誤是由于沒有按照程序設計語言的語法規(guī)則書寫程序而導致的。例如,在Python中編寫了空格,在Python3.x中將print()函數(shù)誤寫成print語句等;運行時錯誤是運行程序時發(fā)生的錯誤,如除數(shù)為0,打開一個不存在的文件等;邏輯錯誤是程序邏輯上發(fā)生的錯誤,如引用了錯誤的變量,算法不正確等,這類錯誤編譯器和解釋器無法直接發(fā)現(xiàn)。為了保證程序的健壯性,在寫程序時除了要考慮通常情況外還需要考慮可能會發(fā)生的異常情況,如程序中有除法,需要考慮除數(shù)是0的情況,否則會發(fā)生錯誤。例如:>>>1/0Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>1/0ZeroDivisionError:divisionbyzeroPython用異常對象(exceptionobject)表示異常情況,遇到錯誤時如果異常對象沒有捕捉或處理時,程序就會用如上述代碼所示稱為回溯(Traceback,或稱為跟蹤)的一種錯誤信息給出提示并終止程序的執(zhí)行。

Python中每一個異常是類的實例。例如,執(zhí)行

1/0

后引發(fā)的

ZeroDivisionError。再如:>>>y=x+1Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>y=x+1NameError:name'x'isnotdefined由于使用了未定義的變量

x,所以引發(fā)了

NameError

異常。Python中內(nèi)建的異常類很多,與查看內(nèi)建函數(shù)的方法一樣,也可以利用

dir()

函數(shù)查看異常類:>>>dir(__builtins__)['ArithmeticError','AssertionError','AttributeError',...]Python中重要的內(nèi)建異常類和描述見下表。類名描述BaseException所有異常的基類Exception常規(guī)異常的基類AttributeError對象不存在此屬性IndexError序列中無此索引IOError輸入/輸出操作失敗KeyboardInterrupt用戶中斷執(zhí)行(通常輸入

Ctrl+C)KeyError映射中不存在此鍵NameError找不到名字(變量)SyntaxErrorPython語法錯誤TypeError對類型無效的操作ValueError傳入無效的參數(shù)ZeroDivisionError除(或取模)運算的第二個參數(shù)為0捕捉異常try-except語句try-except語句的一般語法形式為:try:被檢測的語句塊except異常類名:異常處理語句塊代碼示例:try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1+num2)exceptValueError:print('Pleaseinputadigit!')程序的示例輸入和執(zhí)行結果為:Enterthefirstnumber:aPleaseinputadigit!由于int()函數(shù)不支持的字符參數(shù)"a",從而引發(fā)了ValueError異常??捎胻ry-except語句捕捉異常并給出錯誤處理信息。多個except子句和一個except塊捕捉多個異??梢杂枚鄠€except子句來捕捉不同的異常。例如:try:

num1=int(input('Enterthefirstnumber:'))

num2=int(input('Enterthesecondnumber:'))

print(num1/num2)exceptValueError:

print('Pleaseinputadigit!')exceptZeroDivisionError:

print('Thesecondnumbercannotbezero!')使用了兩個except子句來捕捉兩種不同的異常,事實上也可以用一個except子句捕捉多種類型的異常。因此可以改寫成如下更簡單的形式:try:

num1=int(input('Enterthefirstnumber:'))

num2=int(input('Enterthesecondnumber:'))

print(num1/num2)except(ValueError,ZeroDivisionError):

print('Invalidinput!')如果想要捕捉所有的異常,可以使用下面的語法格式:try:被檢測的語句塊except異常類名as錯誤原因名:異常處理語句塊print(錯誤原因名)這種方式可以將錯誤原因放到err對象中,并在異常處理塊中輸出該錯誤原因。例如:try:num1=int(input("輸入第一個數(shù)字:"))num2=int(input("輸入第二個數(shù)字:"))print(num1/num2)exceptExceptionaserr: print("Somethingwentwrong!")print(err)#輸出具體錯誤信息程序的示例輸人和執(zhí)行結果如下:輸入第一個數(shù)字:aSomethingwentwrong!invalidliteralforint()withbase10:"a"except后使用了“Exception”是常規(guī)異常的基類名(并非Python中所有異常),它可以捕獲所有的常規(guī)異常,不用再寫出具體的異常類名這樣做既保證了異常捕獲的完整性,又非常簡單方便。else子句一個try-except塊可以與if語句或循環(huán)語句一樣有一條else子句。如果在try塊中沒有異常引發(fā),則else子句被執(zhí)行。從邏輯上看else是針對except子句而言的。try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1/num2)except(ValueError,ZeroDivisionError):print('Invalidinput!')else:print('HelloWorld')如果輸入正確沒有引發(fā)異常,則跳過except塊執(zhí)行else子句中的語句。輸入和執(zhí)行結果如下:Enterthefirstnumber:3Enterthesecondnumber:50.6HelloWorld設置一個場景:讓用戶輸入數(shù)據(jù),只有正確才能繼續(xù)執(zhí)行后面代碼,如輸入的數(shù)據(jù)不合法,則繼續(xù)輸入。whileTrue:try:num1=int(input('Enterthefirstnumber:'))num2=int(input('Enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)else:break程序的示例輸入和執(zhí)行結果如下:Enterthefirstnumber:ainvalidliteralforint()withbase10:'a'Enterthefirstnumber:3Enterthesecondnumber:0divisionbyzeroEnterthefirstnumber:3Enterthesecondnumber:50.6實際應用中遍歷列表時,若索引越界會引發(fā)IndexError異常,此時應該有終止遍歷的動作,在except子句中添加break語句即可實現(xiàn)此功能。例如:aList=[1,2,3,4,5]i=0whileTrue:try:print(aList[i])exceptIndexError:print('indexerror')breakelse:i+=1finally子句finally子句可以用在try語句中,無論是否發(fā)生異常,finally子句中的語句塊都要被執(zhí)行。觀察下面的程序及其輸入和輸出結果。try:x=int(input('Enterthefirstnumber:'))y=int(input('Enterthesecondnumber:'))print(x/y)exceptExceptionaserr:print(err)finally:print('Itisafinally.')正確輸入數(shù)據(jù)時程序運行結果如下:Enterthefirstnumber:3Enterthesecondnumber:50.6Itisafinally.錯誤輸入數(shù)據(jù)時程序運行結果如下:Enterthefirstnumber:3Enterthesecondnumber:0divisionbyzeroItisafinally.正確輸入數(shù)據(jù)時沒有發(fā)生異常,執(zhí)行完try中的語句,接著執(zhí)行finally中的語句;錯誤輸入數(shù)據(jù)時發(fā)生異常,執(zhí)行except中的語句,接著執(zhí)行finally子句中的語句。可以看到,finally子句中的語句塊不管是否發(fā)生異常都會被執(zhí)行。raise除了如ZeroDivisionError這樣的由Python解釋器引發(fā)的異常外,還可以利用raise語句主動引發(fā)異常。raise語句的一般語法形式為:raise[異常名]異常名可以是一個異常類或異常類的實例。例如:看一個具體的例子:deffoo(score):ifscore<60:raiseException("Invalidinput!",score)else:print("That'sgreat.")foo(58)因為輸入的函數(shù)參數(shù)為58,因此滿足if條件,會引發(fā)異常導致程序停止,如果輸入的參數(shù)大于或等于60,則不會引發(fā)異常,輸出字符串“That'sgreat.”。執(zhí)行程序后的輸出結果為:Traceback(mostrecentcalllast):File"C:/Python/programs/exception.py",line7,in<module>foo(58)File"C:/Python/programs/exception.py",line3,infooraiseException("Invalidinput!",score)Exception:('Invalidinput!',58)總結異常。Python中用異常對象表示異常情況。每一個異常是異常類的實例。Python中內(nèi)建的異常類很多,其中BaseException是所有異常的基類,Exception是常規(guī)異常類。try-except語句。將被檢測的和異常處理語句序列分別放入try和except中,如果被檢測的語句序列中有異常,則執(zhí)行異常處理語句序列;否則,忽略except后的語句。一個try語句中可以有多個except子句,也可以用一個except塊捕捉多個異常。try-except-else語句。如果try中沒有異常,那么except子句將被跳過,執(zhí)行else中的語句。try-finally語句。finally中的語句無論是否有異常最后都要執(zhí)行。raise語句。除由Python解釋器引發(fā)的異常外,還可以利用raise語句由程序主動引發(fā)異常,可以是系統(tǒng)產(chǎn)生的或由用戶自定義的異常名。[限時練習]1.下列哪種錯誤類型會在代碼運行時引發(fā)ZeroDivisionError異常()。

A.語法錯誤

B.運行時錯誤

C.邏輯錯誤

D.編譯錯誤

【答案】B

【解析】ZeroDivisionError屬于運行時錯誤,因程序運行時除數(shù)為零引發(fā),語法錯誤在代碼解析階段就會被發(fā)現(xiàn)(如缺少冒號),而邏輯錯誤是程序邏輯問題(如算法錯誤)。2.Python中所有異常的基類是()。

A.

Exception

B.

BaseException

C.

SyntaxError

D.

RuntimeError

【答案】B

【解析】BaseException是所有異常的基類,而Exception是其子類,用于常規(guī)異常。3.下面代碼的輸出結果可能是什么()。try:print(10/0)exceptValueError:print("ValueError")exceptZeroDivisionError:print("ZeroDivisionError")A.ValueError

B.ZeroDivisionError

C.無輸出

D.程序報錯

【答案】B

【解析】10/0會引發(fā)ZeroDivisi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論