- Python從菜鳥(niǎo)到高手(第2版)
- 李寧編著
- 1374字
- 2023-08-10 16:41:18
1.5 調(diào)試Python程序

微課視頻
在開(kāi)發(fā)復(fù)雜的Python程序時(shí),如果出現(xiàn)bug,就需要對(duì)程序進(jìn)行調(diào)試,以便找出bug對(duì)應(yīng)的代碼行。調(diào)試程序的方法很多,例如,可以使用print函數(shù)在程序的不同位置輸出特定的信息,以便縮小bug出現(xiàn)的范圍。不過(guò)這種方法太原始了,現(xiàn)在普遍使用的方法是通過(guò)調(diào)試器一步步跟蹤代碼行,這種方式可以非常方便地找到bug所在的位置。
在PyCharm中調(diào)試Python代碼的步驟如下。

圖1-15 設(shè)置斷點(diǎn)后的效果
1.設(shè)置斷點(diǎn)
設(shè)置斷點(diǎn)是調(diào)試程序的過(guò)程中必不可少的一步。Python調(diào)試器每次遇到斷點(diǎn)時(shí)會(huì)將當(dāng)前線程掛起,也就是暫停當(dāng)前程序的運(yùn)行。
在PyCharm編輯器中行號(hào)的后面單擊,就可以為當(dāng)前行添加斷點(diǎn),如果當(dāng)前行已經(jīng)有斷點(diǎn),再單擊一次,就會(huì)刪除當(dāng)前行的斷點(diǎn)。設(shè)置斷點(diǎn)后的效果如圖1-15所示。
2.以調(diào)試方式運(yùn)行Python程序
在PyCharm中運(yùn)行分為兩種方式:Release和Debug,也就是發(fā)行和調(diào)試。如果只想觀察程序的執(zhí)行效果,可以選擇Release方式;如果要調(diào)試程序,就需要使用Debug方式。
Debug按鈕在PyCharm工具欄左側(cè),如圖1-16所示(顯示小爬蟲(chóng)的按鈕,在Release按鈕的右側(cè))。

圖1-16 Debug按鈕
現(xiàn)在單擊Debug按鈕,就會(huì)運(yùn)行Python程序,如果Python程序沒(méi)有設(shè)置任何斷點(diǎn),Debug和Release方式運(yùn)行的效果是一樣的,都會(huì)輸出運(yùn)行結(jié)果,只不過(guò)以Debug方式運(yùn)行程序,除了會(huì)輸出運(yùn)行結(jié)果,還會(huì)連接到調(diào)試服務(wù)器,并輸出如圖1-17所示的連接成功信息。
如果Python程序中有斷點(diǎn),當(dāng)程序執(zhí)行到斷點(diǎn)處,就會(huì)暫停程序,并且將斷點(diǎn)行設(shè)為藍(lán)色背景,如圖1-18所示。

圖1-17 輸出連接成功信息

圖1-18 將斷點(diǎn)行設(shè)為藍(lán)色背景
同時(shí),在PyCharm下方會(huì)顯示Debugger視圖,如圖1-19所示。在該視圖中會(huì)顯示各種調(diào)試信息。
3.跟蹤調(diào)試程序
調(diào)試的主要目的是將程序中的數(shù)據(jù)展現(xiàn)出來(lái),也就是說(shuō),調(diào)試調(diào)的就是程序中的數(shù)據(jù)。因此,通過(guò)Python調(diào)試器,可以用多種方式觀察Python程序中數(shù)據(jù)的變化。例如,由于n = 20在m = 30前面,所以在m = 30處中斷后,n = 20肯定是已經(jīng)執(zhí)行了,可以將光標(biāo)放到n = 20語(yǔ)句上,這時(shí)會(huì)在彈出的窗口中顯示變量n的數(shù)據(jù)類型和當(dāng)前的值,同時(shí)在每條變量賦值語(yǔ)句的后面會(huì)顯示當(dāng)前變量的值,如圖1-20所示。

圖1-19 Debugger視圖

圖1-20 顯示變量n的數(shù)據(jù)類型和當(dāng)前的值
在Debug視圖的上方有一排按鈕,如圖1-21所示。彎曲箭頭的按鈕是Step Over,向下箭頭的按鈕是Step Into。這兩個(gè)按鈕功能是用來(lái)一步一步調(diào)試代碼的。使用Step Into調(diào)試代碼,當(dāng)遇到函數(shù)、方法等代碼塊時(shí),會(huì)跟蹤進(jìn)入代碼塊,然后繼續(xù)一步一步運(yùn)行代碼(單擊一下按鈕,就會(huì)執(zhí)行一條語(yǔ)句)。使用Step Over調(diào)試,如果遇到代碼塊,會(huì)將這個(gè)代碼塊當(dāng)作一條語(yǔ)句來(lái)處理,并不會(huì)進(jìn)入代碼塊內(nèi)部。通常來(lái)講,如果用戶不能確認(rèn)代碼塊中的代碼是否正確,建議使用Step Into進(jìn)行調(diào)試,這樣可以跟蹤每一行代碼,如果用戶可以保證代碼塊一定是正確的,那么使用Step Over進(jìn)行調(diào)試會(huì)更節(jié)省時(shí)間。
4.在運(yùn)行時(shí)修改變量的值
斷點(diǎn)調(diào)試不僅可以跟蹤代碼,還可以在運(yùn)行時(shí)修改變量的值,這樣就不需要每次使用不同的值調(diào)試時(shí)都重新運(yùn)行程序了。如果在使用某個(gè)變量之前改變?cè)撟兞康闹担敲聪麓问褂迷撟兞繒r(shí),就會(huì)使用新值。
要想修改變量的值,需要在Variables窗口中選中該變量,然后在右鍵菜單中單擊Set Value…菜單項(xiàng),如圖1-22所示。這時(shí)該變量處于可編輯狀態(tài),如圖1-23,直接在文本框中輸入新值即可。

圖1-21 用于調(diào)試的功能按鈕

圖1-22 在右鍵菜單中單擊Set Value...菜單項(xiàng)
編輯完變量n的值后,在代碼區(qū)域,變量后面的當(dāng)前值提示也會(huì)變成修改后的值,但源代碼是不會(huì)改變的,如圖1-24所示。下一次使用變量n,值就會(huì)變成100。

圖1-23 該變量處于編輯狀態(tài)

圖1-24 編輯變量后的效果
- Dynamics 365 Application Development
- MATLAB圖像處理超級(jí)學(xué)習(xí)手冊(cè)
- Mastering Ubuntu Server
- PHP網(wǎng)絡(luò)編程學(xué)習(xí)筆記
- HTML5游戲開(kāi)發(fā)案例教程
- 云計(jì)算通俗講義(第3版)
- Java程序設(shè)計(jì):原理與范例
- 數(shù)據(jù)結(jié)構(gòu)案例教程(C/C++版)
- Java系統(tǒng)化項(xiàng)目開(kāi)發(fā)教程
- 劍指大數(shù)據(jù):企業(yè)級(jí)數(shù)據(jù)倉(cāng)庫(kù)項(xiàng)目實(shí)戰(zhàn)(在線教育版)
- 編程菜鳥(niǎo)學(xué)Python數(shù)據(jù)分析
- Python:Deeper Insights into Machine Learning
- Python大學(xué)實(shí)用教程
- IPython Interactive Computing and Visualization Cookbook
- Web開(kāi)發(fā)的平民英雄:PHP+MySQL