《Python程序設計》課件9-程序調試_第1頁
《Python程序設計》課件9-程序調試_第2頁
《Python程序設計》課件9-程序調試_第3頁
《Python程序設計》課件9-程序調試_第4頁
《Python程序設計》課件9-程序調試_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

~1~第九章程序調試目錄調試基本概念常見的錯誤類型使用print語句進行基礎調試理解Python的錯誤消息斷點與單步執行Python調試器pdb應用案例-2-1.調試基本概念調試主要目的是識別、診斷和修復代碼中的錯誤或缺陷(bug)。調試有助于確保程序按預期運行,避免出現意外結果甚至安全隱患。調試的基本目標包括以下三個方面:(1) 確保程序正確性:程序應按設計預期正常運行并輸出正確結果。(2)

提升程序效率:合理利用資源,借助調試發現并優化性能瓶頸。(3) 保證程序穩定性:在各種環境和邊界情況下,程序應表現穩定。32.常見的錯誤類型在Python中,常見的錯誤可以分為以下幾類:(1)語法錯誤:代碼中的拼寫或格式錯誤,通常會在代碼執行前被編譯器或解釋器檢測到。這類錯誤通常容易發現和修復。print("Helloworld"#缺少閉合括號(2)運行時錯誤:在程序運行時發生的錯誤,如除以零、訪問不存在的文件等。這類錯誤會導致程序在執行過程中突然停止。print(10/0)#嘗試除以零,會引發ZeroDivisionError(3)邏輯錯誤:代碼邏輯上的錯誤,使程序無法按預期運行。邏輯錯誤不會導致程序崩潰,但會產生不正確的結果。defaverage(numbers):returnsum(numbers)/len(numbers)#當numbers為空時,會出錯,導致ZeroDivisionError(4)語義錯誤:代碼在語法和邏輯上均無問題,但實現的功能與預期不符。例如,代碼的實際含義與編寫者的意圖不同。defsquare(numbers):return[n*nforninnumbers]#如果目標是求平方根,這里的邏輯不正確43.使用print語句進行基礎調試print語句是最基礎的調試工具。通過打印變量的值或程序的狀態,可以幫助開發者理解程序的行為。例9.1使用print語句進行基礎調試假設有一個函數find_max_even(),其目標是找出列表中偶數的最大值:deffind_max_even(numbers):max_even=Nonefornumberinnumbers:ifnumber%2==0:max_even=numberreturnmax_evennumbers=[3,1,4,1,5,9,2,6,5,3,5]print(find_max_even(numbers))#期望輸出65在函數find_max_even()中的if語句內添加print語句,查看max_even在循環過程中的更新情況:deffind_max_even(numbers):max_even=Nonefornumberinnumbers:ifnumber%2==0:print(f"檢查數字:{number},當前max_even:{max_even}")max_even=numberreturnmax_even通過觀察輸出可以發現,每次遇到偶數時,max_even的值都被直接替換,而沒有進行比較。這就是導致函數返回錯誤結果的原因。6為正確實現偶數最大值查找,應在替換max_even時加入條件檢查:deffind_max_even(numbers):max_even=Nonefornumberinnumbers:ifnumber%2==0:

ifmax_evenisNoneornumber>max_even:max_even=numberreturnmax_even74.理解Python的錯誤消息解讀Python錯誤消息當Python代碼執行遇到問題時,它會拋出一個異常,并顯示以下信息:錯誤類型:指明遇到的錯誤種類,如TypeError、NameError、SyntaxError等。錯誤消息:提供關于錯誤的詳細說明。例如,"name'x'isnotdefined"表明一個變量未定義的問題。追蹤信息:顯示錯誤發生的位置,通常包括文件名、行號以及相關代碼片段。8(1)SyntaxError:語法錯誤。通常由于拼寫或格式不正確引起。defgreet(name)print("Hello,"+name)(2)NameError:名稱錯誤。嘗試訪問一個未定義的變量,通常由于拼寫錯誤或變量未定義所致。print(age)(3)TypeError:類型錯誤。函數或操作應用于不適當類型的對象。例如,在不兼容的數據類型之間進行操作。'2'+2(4)IndexError:索引錯誤。嘗試訪問序列(如列表、元組或字符串)中不存在的索引。my_list=[1,2,3]print(my_list[3])(5)KeyError:鍵錯誤。在字典中嘗試訪問不存在的鍵。my_dict={'name':'Alice'}print(my_dict['age'])95.斷點與單步執行1.斷點和單步執行斷點和單步執行是程序調試中最常用的方法。通過在特定位置暫停程序的執行,程序員可以逐步檢查代碼的內部狀態,有效地發現并修復問題。斷點和單步執行通常在集成開發環境(IDE)中使用,如PyCharm、VisualStudioCode、JupyterLab等。2.斷點的使用斷點是調試中的一個標記點,可以設置在代碼的任何行。當程序運行到斷點時會暫停,使程序員能夠檢查該處的變量值、調用棧和執行流程。3單步執行代碼當程序在斷點處暫停后,可以使用單步執行來逐行執行代碼,從而觀察代碼的執行順序和變量的變化。單步執行通常包括以下幾種方式:步入(StepInto):如果當前行包含函數調用,步入將進入該函數內部。步過(StepOver):執行當前行,但不會進入被調用的函數內部。步出(StepOut):繼續執行,直到當前函數執行完畢返回到上一層。4.觀察變量和程序狀態在斷點暫停后,IDE通常會提供一個調試面板,允許程序員查看和修改變量的值10116.Python調試器pdbPythonDebugger(pdb)是Python官方提供的命令行調試器,可以設置斷點、單步執行、檢查堆棧幀、查看和修改變量等操作。pdb尤其適用于無法使用圖形界面IDE的場景,例如在遠程服務器或終端環境中調試代碼。(1)pdb的基本使用:在Python腳本中啟用pdb的最簡單方法是導入pdb模塊,并在希望暫停執行的地方調用pdb.set_trace()。importpdbdefdivide(x,y):pdb.set_trace()#在此處設置斷點

returnx/yprint(divide(10,0))(2)pdb的常用命令在pdb環境中,可以使用多種命令來控制程序執行并檢查狀態:b(breakpoint):設置斷點。例如,b15會在第15行設置斷點。n(next):執行下一行代碼。s(step):步入函數或方法內部。c(continue):繼續執行,直到遇到下一個斷點。p(print):打印變量的值。例如,px會打印變量x的當前值。l(list):列出當前位置的源代碼。這些命令提供了對程序執行的細粒度控制,使調試過程更加清晰。127.應用案例例9.3隨機整數除法及異常處理代碼調試設計程序生成一組隨機整數,并對相鄰的兩個數字進行除法操作。程序中包含了異常處理,以防止除以零的情況,且通過打印信息展示除法過程中的各個步驟,以便更好地理解和調試代碼。13importrandomdefdivide_numbers(a,b):try:result=a/bexceptZeroDivisionError:print("Error:Divisionbyzeroisnotallowed.")result=Nonereturnresultdefmain():numbers=[random.randint(0,10)for_inrange(10)]print("Generatednumbers:",numbers)foriinrange(len(numbers)-1):a=numbers[i]b=numbers[i+1]print(f"Dividing{a}by{b}...")result=

溫馨提示

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

評論

0/150

提交評論