Python程序開發基礎 課件 項目9 處理異常_第1頁
Python程序開發基礎 課件 項目9 處理異常_第2頁
Python程序開發基礎 課件 項目9 處理異常_第3頁
Python程序開發基礎 課件 項目9 處理異常_第4頁
Python程序開發基礎 課件 項目9 處理異常_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

異常處理—為查詢身份證歸屬地添加異常任務描述

在前面文件任務一中,用戶通過輸入身份證前6位數字可以查詢到身份證歸屬地,此任務實現了歸屬地查詢的功能,如果用戶訪問的“身份證碼值對照表.txt”文件不在當前路徑下,就會引發異常。

本任務要求通過添加異常處理功能,完善查詢身份歸屬地的程序。

現實生活并不是一帆風順的,總會遇到各種突發情況,譬如,飛機延誤、火車晚點、上下班路上堵車等,這些情況都會導致上班遲到、會議錯過、約會趕不上。同樣,程序在運行過程中也會遇到各種各樣的問題,最常見的問題就是語法錯誤。當開發人員編寫了不符合Python語法格式的代碼時程序就會被中止運行。除此之外還有邏輯錯誤,即語法格式正確但在運行時仍會發生錯誤。無論是哪種錯誤,都會導致程序無法正常運行。當程序被中止時,屏幕上會顯示如下信息:錯誤類型錯誤信息錯誤位置01異常的定義及分類02捕獲異常03任務實現異常定義及分類01

異常的定義異常是指在程序運行過程中檢測到的錯誤。若異常不被處理,默認情況下會導致程序崩潰而中止運行。異常的分類所有的異常類都繼承自基類BaseException。BaseException類中包含4個子類,其中子類Exception是大多數常見異常類的父類。異常的分類Exception中常見的子類及其描述見下表。捕獲異常02try-except語句try-except語句用于捕獲程序運行過程中出現的異常,其格式如下:try:

可能出錯的代碼......except[異常類型]:

錯誤處理語句......try:foriin3:print(i)exceptTypeError:print('循環應改為:foriinrange(3):')譬如:try-except語句執行過程如下:解釋器優先執行try子句中的代碼。若try子句未產生異常,則忽略except子句中的代碼。若try子句產生異常,則忽略try子句的剩余代碼,轉而執行except子句中的代碼。捕獲單個異常捕獲程序運行過程中的單個異常時,需要指定具體的異常。try:foriin3:print(i)exceptTypeError

ase:print(f"異常原因:{e}")捕獲多個異常捕獲程序運行過程中的多個異常時,既可以將多個異常以元組形式放在except語句后面來處理,也可以聯合使用多個except語句。try:print(count)except(NameError,IndexError)aserror:print(f"異常原因:{error}")try:print(count)exceptNameErroraserror:print(f"異常原因:{error}")exceptIndexErroraserror:print(f"異常原因:{error}")捕獲所有異常捕獲程序運行過程中的所有異常時,既可以將所有異常的父類Exception置于except后面來處理,也可以采用省略except后面的異常類型的方式來處理。try:print(count)exceptExceptionaserror:print(f"異常原因:{error}")try:print(count)except:print("程序出現異常,原因未知")else子句else子句與try-except語句連用時,其中的代碼會在try子句未出現異常時執行。try:

可能出錯的語句......except:

出錯后的執行語句else:

未出錯時的執行語句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("請輸入一個整數:"))

print(alp[n])except(NameError,TypeError):print("輸入錯誤,請輸入一個整數")else:print("沒有發生異常")譬如:finally子句finally子句與try-except語句連用時,無論try-except是否捕獲到異常,finally子句中的代碼都要執行。try:

可能出錯的語句......except:

出錯后的執行語句finally:

無論是否出錯都會執行的語句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("請輸入一個整數:"))

print(alp[n])except(NameError,TypeError):print("輸入錯誤,請輸入一個整數")else:print("沒有發生異常")finally:print("程序執行完畢")譬如:異常處理應用編程檢測輸入是否為整數,如果是整數顯示出來,否則捕獲錯誤并報錯。defint_input(ch=''):try:ch=int(ch)print("%d"%ch)exceptValueError:print('出錯,您輸入的不是整數')if__name__=='__main__':x=input('請輸入一個整數:')int_input(x)任務實現——為查詢身份證歸屬地添加異常03根據題意,由于“查詢身份證歸屬地”程序需要訪問當前路徑下的“身份證碼值對照表.txt”文件,若在讀取時沒有在當前路徑下找到該文件,則會引發FileNotFoundError異常,所以本任務直接使用try...except語句捕獲并處理FileNotFoundError異常即可。

任務分析程序代碼根據異常處理方法,程序如下:importjsontry:f=open("身份證碼值對照表.txt",'r',encoding='utf-8')content=f.read()content_dict=json.loads(content)#轉換為字典類型

address=input('請輸入身份證前6位:')forkey,valincontent_dict.items():ifkey==address:print(val)f.close()exceptFileNotFoundError:print("文件不存在")任務總結

異常是指在程序運行過程中檢測到的錯誤。所有的異常類都繼承自基類BaseException。BaseException類中包含4個子類,其中子類Exception是大多數常見異常類的父類。通常是通過try-except語句捕獲程序運行過程中出現的異常。當try子句中的代碼未產生異常,則忽略except子句中的代碼;當try子句產生異常,則忽略try子句的剩余代碼,轉而執行except子句中的代碼。利用as子句可以獲得異常的具體信息。except子句還可以和else子句及finally子句連用,完成更多的處理。謝謝觀看自定義異常—檢測系統密碼異常任務描述輸入密碼,密碼少于8位拋出異常并輸出異常。

當程序發生錯誤時系統都會自動拋出異常,那么,Python中能不能手動拋出異常?回答是可以的。Python中使用raise語句完成手動拋出異常。01拋出異常02自定義異常03任務實現拋出異常01

拋出異常raise語句后可以添加具體的異常類,從而引發相應的異常。raise異常類名譬如:raiseNameError使用異常類引發異常

拋出異常譬如:raiseNameError()raise語句后也可以添加異常類的對象,從而引發相應的異常。使用異常對象引發異常raise異常對象

拋出異常raise語句后若不添加任何內容,可重新引發剛才發生的異常,即由異常引發異常。try:num=10print(n)exceptNameErrorase:print(f'異常的原因是{e}')譬如:raiseraise重新引發異常

異常的傳遞若程序中產生的異常沒有被處理,產生的異常會一層一層向上傳遞,直至最上面一層也未做處理,就會程序崩潰。defget_width():num=int(input("請輸入除數:"))width_len=10/numreturnwidth_lendefcalc_area():width_len=get_width()returnwidth_len*width_lendefshow_area():try:area_val=calc_area()print(f"正方形的面積是:{area_val}")exceptZeroDivisionErrorase:print(f"捕捉到異常:{e}")譬如除數為0產生異常ZeroDivisionError,函數中并沒有對這一異常進行處理,所以就會向上層傳遞這個異常上一層函數也未處理,繼續向上傳遞這個異常該層包含異常處理代碼并捕獲了ZeroDivisionError異常

assert斷言語句assert斷言語句用于判定一個表達式是否為真,如果表達式為True,不做任何操作,否則引發AssertionError異常。assert表達式[,參數]這里,表達式是assert語句的判定對象,參數通常是一個自定義異常或顯示異常描述信息的字符串。譬如不帶參數帶參數age=int(input('請輸入年齡:'))assertage>=18,'年齡必須在18歲及以上'print("可以參加")有關異常的描述自定義異常02自定義異常Python允許程序開發人員自定義異常。自定義異常類的方法很簡單,只需創建一個類,讓它繼承Exception類或其它異常類即可。classCustomError(Exception):pass#空語句,保證程序結構的完整性譬如classCustomError(Exception):passraiseCustomError自定義異常成功自定義異常自定義異常的應用classCustomError(Exception):passtry:raiseCustomError('錯誤代碼')exceptCustomErrorase:print(e)raise任務實現——檢測系統密碼異常03根據題意,首先定義密碼輸入函數input_password(),當輸入的密碼pasword長度不足8位則自定義異常exp并拋出異常。主程序使用try…except捕獲調用輸入密碼函數的異常,并輸出異常。

任務分析程序代碼根據拋出異常方法,程序如下:definput_password():pasword=input("請輸入密碼:")iflen(pasword)>=8:returnpaswordelse:

exp=Exception("密碼長度小于8")

raise

exptry:

溫馨提示

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

評論

0/150

提交評論