官术网_书友最值得收藏!

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 編輯變量后的效果

主站蜘蛛池模板: 洪洞县| 岳普湖县| 搜索| 汉阴县| 鲁山县| 云南省| 武强县| 铅山县| 峨眉山市| 永济市| 林口县| 顺昌县| 什邡市| 清镇市| 高要市| 资兴市| 安宁市| 玉门市| 南靖县| 偏关县| 玛曲县| 错那县| 仁寿县| 安阳市| 赤城县| 祥云县| 平潭县| 股票| 遂宁市| 稷山县| 伊川县| 东兴市| 嫩江县| 开平市| 无锡市| 澄江县| 中阳县| 漠河县| 长宁区| 广宁县| 射洪县|