人工智能導論 課件 11.8-9 異常處理-綜合實踐_第1頁
人工智能導論 課件 11.8-9 異常處理-綜合實踐_第2頁
人工智能導論 課件 11.8-9 異常處理-綜合實踐_第3頁
人工智能導論 課件 11.8-9 異常處理-綜合實踐_第4頁
人工智能導論 課件 11.8-9 異常處理-綜合實踐_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

異常處理通識課-《人工智能通識》概述1異常(Exception)是指程序中的例外、不正常情況。Python使用異常對象來表示異常狀態,并在程序運行過程中遇到錯誤時引發異常。異常對象未被處理(或捕獲)時,程序將終止并顯示一條錯誤消息(traceback)。程序停止執行并且提示錯誤信息這個動作,通常稱之為拋出(raise)異常。11.8異常處理2每個異常都是某個類的實例。在Python3中,BaseException是所有異常類的基類,所有的內置異常都是它的派生類。有很多內置的異常類,表11-16描述了最重要的幾個。11.8異常處理311.8異常處理4在Python當中,若一個程序在運行的時候出錯,Python解釋器會自動在出錯的地方生成一個異常對象,而后Python解釋器會自動在出錯地方的附近尋找有沒有對這個異常對象處理的代碼,所謂異常處理代碼就是try…except語句,如果沒有,Python解釋器會自動將這個異常對象拋給其調用函數,就這樣層層拋出,如果在main當中也沒有對這個異常對象處理的代碼,Python解釋器(實際上是操作系統)最后會將整個程序給終止掉,并將錯誤信息在顯示屏上輸出。11.8異常處理5

Python中使用try...except語句捕獲異常。try子句中的代碼塊放置可能出現異常的語句,except子句中的代碼塊處理異常。例:除法運算時除數為0,會引起一個ZeroDivisionErrortotal=92 異常信息如下所示:number=0 ZeroDivisionError:divisionbyzeroprice=total/numberprint("theend")11.8異常處理6程序因為ZeroDivisionError而中斷了,語句print("theend")沒有運行。為了處理異常,使用try...except更改代碼total=92number=0 運行結果如下:try: 除數number不能為0!price=total/number theendexceptZeroDivisionError:print("除數number不能為0!")print("theend")11.8異常處理7這樣程序就不會因為異常而中斷,從而print("theend")語句正常執行。把可能發生錯誤的語句放在try模塊里,用except來處理異常。except可以處理一個專門的異常,也可以處理一組圓括號中的多個異常,如果except后沒有指定異常類型,則默認處理所有的異常。11.8異常處理8except語句中同時處理多個異常示例代碼:total=[92,29] 運行結果:number=0 除數number不能為0或者列表索引越界!try: theend#列表索引越界,最大值為1price=total[3]/number#同時捕捉ZeroDivisionError和IndexError異常except(ZeroDivisionError,IndexError):print("除數number不能為0或者列表索引越界!")print("theend")11.8異常處理9

在try...except語句后面可以添加finally子句,無論異常是否發生,finally子句都會被執行。所以,finally子句一般用于關閉因異常而不能釋放的系統資源。finally語句示例代碼:try:f=open("demofile.txt","r")f.write("Addsomenewcontent")except:print("Somethingwentwrongwhenwritingtothefile")finally:11.8異常處理10f.close()

print(f.read())運行結果如下:SomethingwentwrongwhenwritingtothefileValueError:I/Ooperationonclosedfile.11.8異常處理11雖然有異常發生,但在程序終止前,finally中的語句也能正常執行。同時在finally語句中釋放了打開的文件對象資源,重新調用文件對象的read()方法時報了錯誤。

當程序出現錯誤時,Python會自動引發異常;也可以通過raise顯式地引發異常,和C#、Java中的throw關鍵字類似。一旦執行了raise語句,raise后面的語句將不能執行。raise語句的用法代碼示例:11.8異常處理12try:s=NoneifsisNone: 運行結果如下:

print("s是空對象") s是空對象#拋出異常,類型NameError 空對象沒有長度raiseNameErrorprint(len(s))exceptNameError:print("空對象沒有長度")11.8異常處理13如果去掉或者注釋掉第5行代碼,因None對象不能使用函數len()調用,程序執行到第6行代碼時將引發TypeError異常。try:s=NoneifsisNone: print("s是空對象") 運行結果如下:

#raiseNameError s是空對象print(len(s)) TypeError:objectoftype'NoneType'hasnolen()exceptNameError:print("空對象沒有長度")11.8異常處理*14在Python中,用戶可以自定義異常,用于更好地描述特定的錯誤或異常情況。通過創建自定義異常,可以為你的應用程序或庫提供更具體和有意義的錯誤消息,從而提高代碼的可讀性和可維護性。#創建自定義異常類classCustomError(Exception):def__init__(self,message="發生了自定義異常"):self.message=messagesuper().__init__(self.message)11.8異常處理*15#使用自定義異常defdivide(x,y):ify==0:raiseCustomError("除數不能為零")returnx/y#捕獲自定義異常try:result=divide(10,0)exceptCustomErrorasce:print(f"捕獲自定義異常:{ce}")11.8異常處理*16在上面的例子中,我們首先定義了一個名為CustomError的自定義異常類,它繼承自內置的Exception類。在這個類中,我們使用了構造函數__init__來初始化異常對象,并通過super().__init__(self.message)調用父類的構造函數。然后,我們定義了一個函數divide,該函數用于執行除法操作。在函數內部,如果除數y為零,我們拋出了自定義異常CustomError,并傳遞了錯誤消息"除數不能為零"。11.8異常處理*17最后,在try-except塊中,我們調用divide函數,并捕獲了可能拋出的自定義異常。如果發生自定義異常,我們就可以通過異常對象訪問到自定義的錯誤消息,從而更好地理解發生了什么錯誤。練習18一、單選題1.關于異常處理,以下選項中描述錯誤的是()?A.Python通過try、except等保留字提供異常處理功能B.程序異常發生經過妥善處理可以繼續執行C.異常語句可以與finally保留字配合使用D.編程語言中異常和錯誤是完全相同的概念練習192.Python中用來拋出異常的關鍵字是()?A.tryB.exceptC.raiseD.finally3.()類是所有異常類的父類?A.ThrowableB.ErrorC.ExceptionD.BseException練習20二、填空題1.Python異常的保留字包括_____、_____、_____、_____等。2.Python常見的異常錯誤有_____、_____、_____、_____、_____等。3.列表越界的異常是_____。練習21三、綜合題1.列舉4種常見的異常。2.簡單說明Python異常處理結構try…except…finally…各個部分的基本作用3.編寫程序,定義一個長度為3的列表,用列表第一個數字除以第二個數字,得到的結果與第三個數字相加。使用異常檢查下面的錯誤:ValueError、ZeroDivisionError,并給出響應的提示。11.9綜合實踐22綜合實踐為垃圾分類項目,學生通過收集和查閱垃圾分類相關資料和資訊,了解垃圾的正確分類方式和垃圾分類的目的。垃圾分類分析可以讓學生了解垃圾的正確分類和相應處理的方法,從而增強他們的環保意識,增強學生參與到垃圾分類和環境保護工作的積極性和主動性,培養學生的社會責任感和公民意識。垃圾分類項目是一項綜合性的任務,不僅牽涉到垃圾分類相關知識還需要運用Python編程知識去綜合分析和設計,需要學生運用多種知識和技能進行分析和處理,培養學生綜合實踐和創新思維能力。項目概述23創建一個簡單的垃圾分類應用程序,根據輸入的垃圾名稱,輸出對應的垃圾類別。使用文件來存儲垃圾分類數據,并在程序中對其進行讀取和處理。準備數據:創建一個文本文“garbage_classification_data.txt”,存儲垃圾分類相關數據,包括名稱、分類、材料和是否可降解,格式如下:knife,Recyclable,metal,nobulb,hazardous,glass,no……項目概述242.實現功能:利用Python基礎知識、流程控制語句、list、dict、文件讀寫和異常處理等內容編寫程序以實現以下功能:(1)用函數實現讀取文件中的垃圾分類數據并存儲到字典中。使用try…except異常處理確保文件存在,如不存在捕捉FileNotFoundError異常,并給出相應的錯誤提示。(2)提示用戶輸入垃圾名稱,當用戶輸入“q”或者“quit”時退出程序。對輸入的垃圾名稱進行字符串處理(去除空格和轉換為小寫)。(3)使用流程控制語句檢查用戶輸入垃圾名稱是否在字典中。如果項目概述25垃圾名稱在字典中,則輸出其相應信息:垃圾名稱、類別、材料和是否可降解;否則,提示用戶輸入的垃圾名稱無法識別,并要求用戶輸入垃圾的分類、材料和是否可降解,添加到垃圾分類數據字典中。最后,用函數實現保存該條信息到垃圾分類數據文件garbage_classification_data.txt中,給出保存成功提示信息。相關知識點261.Python基礎語法:程序開發設計過程中需要用不同數據類型的變量保存各種信息。用戶通過輸入函數input()輸入的垃圾名稱,同時需要對用戶輸入的字符串用strip()方法去除兩端空格和lower()方法轉化為小寫字母再進行比較等特殊處理,最后還要通過輸出函數print()打印出垃圾具體分類信息。2.文件讀寫:系統需要利用文件對象的open()方法打開垃圾分類數據文件,并利用文件對象的read()、readline()、readlines()等方法讀取文件的內容。如用戶輸入的垃圾名稱不在文件中,還需要使用write()相關知識點27方法寫入到垃圾分類文件中,最后記得用close()方法關閉文件對象等。3.基本數據類型:系統讀入垃圾分類數據文件內容構建字典數據類型,以垃圾名稱為key值,通過append()方法添加數據、remove()方法刪

溫馨提示

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

評論

0/150

提交評論