PyCharm入門第一步(二)——調(diào)試第一個(gè)Python應(yīng)用程序
第2步:調(diào)試您的第一個(gè)Python應(yīng)用程序
找出問題的根源
PyCharm報(bào)告運(yùn)行時(shí)錯(cuò)誤:a ZeroDivisionError。深入研究一下代碼,找出問題所在。這里可以使用PyCharm調(diào)試器來查看代碼中發(fā)生了什么。要開始調(diào)試,您必須先設(shè)置一些斷點(diǎn)。要?jiǎng)?chuàng)建斷點(diǎn),只需單擊左側(cè)gutter:
接下來,單擊左側(cè)gutter中的播放圖標(biāo),在main旁邊,然后選擇Debug 'Car'。 PyCharm啟動(dòng)調(diào)試會(huì)話并顯示調(diào)試工具窗口。
在Console選項(xiàng)中,輸入S:
如您所見,斷點(diǎn)標(biāo)記變?yōu)樗{(lán)色。這意味著已經(jīng)達(dá)到了斷點(diǎn); 請(qǐng)注意,此時(shí)尚未執(zhí)行突出顯示的代碼行。
單擊播放圖標(biāo)以恢復(fù)腳本執(zhí)行?,F(xiàn)在另一個(gè)斷點(diǎn)也出現(xiàn)了:默認(rèn)情況下,PyCharm將停止代碼中未捕獲的任何異常,并且它將顯示帶閃電的斷點(diǎn)圖標(biāo)。
控制臺(tái)還會(huì)顯示錯(cuò)誤消息。您還可以在調(diào)試器中看到該值self.time等于零:
Surrounding code
為避免再次遇到同樣的問題,現(xiàn)在添加一個(gè)if語句來檢查時(shí)間是否等于零。為此,在方法average_speed中選擇語句return self.odometer / self.time,然后按Ctrl + Alt + T(Code | Surround with):
PyCharm創(chuàng)建一個(gè)stub if構(gòu)造,讓你完成填充正確內(nèi)容的任務(wù)。編輯后,得到以下內(nèi)容:
詳細(xì)調(diào)試
“調(diào)試”工具窗口顯示框架, 變量和監(jiān)視的專用窗格以及控制臺(tái),其中顯示所有輸入和輸出信息。如果希望控制臺(tái)始終可見,可以將其拖動(dòng)到PyCharm窗口的一個(gè)邊緣。
Stepping
如果您希望逐行查看代碼的作用,則無需在每一行上設(shè)置斷點(diǎn),您可以單步執(zhí)行代碼。看一下示例程序是什么樣子:單擊播放圖標(biāo),轉(zhuǎn)到控制臺(tái)詢問汽車的平均速度(類型'S'),可以看到達(dá)到斷點(diǎn)。這時(shí)可以使用Stepping工具欄按鈕選擇想要在下一行停止的行。
例如,單擊Step Over 按鈕并看到藍(lán)色標(biāo)記移動(dòng)到下一行代碼:
如果單擊Step Into按鈕,您將看到action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper() 調(diào)試器進(jìn)入文件parse.py:
但是,如果繼續(xù)使用Step Over 按鈕,您將看到您的應(yīng)用程序只是傳遞到下一個(gè)循環(huán):
如果您想專注于自己的代碼,請(qǐng)使用Step Into My Code按鈕 - 這樣您就可以避免進(jìn)入庫類。
Watching
PyCharm允許您觀察任何變量。只需要單擊Watches選項(xiàng)的工具欄中的+,然后輸入你想要觀看的變量的名稱-將其設(shè)置為 my_car.time。請(qǐng)注意,此處可以使用代碼完成:
首先,您看到時(shí)間等于nil - 這意味著該變量尚未定義:
但是,當(dāng)程序執(zhí)行繼續(xù)到定義變量的作用域時(shí),監(jiān)視器將獲得以下視圖:
內(nèi)聯(lián)調(diào)試
您可能已經(jīng)注意到另一個(gè)PyCharm功能,可以輕松查看代碼正在執(zhí)行的操作: 內(nèi)聯(lián)調(diào)試器。一旦你遇到任何斷點(diǎn),PyCharm就會(huì)在編輯器中向你顯示許多變量的值:
默認(rèn)情況下啟用此內(nèi)聯(lián)調(diào)試功能。如果您沒有看到內(nèi)聯(lián)調(diào)試值,請(qǐng)使用調(diào)試工具窗口中的設(shè)置圖標(biāo)檢查它是否已啟用::
評(píng)估表達(dá)式
最后,您可以隨時(shí)評(píng)估任何表達(dá)式。
實(shí)際上,你可以用watch看到同樣的東西。使用評(píng)估表達(dá)式,您可以執(zhí)行使用watch無法執(zhí)行的操作:您可以更改內(nèi)容。例如,如果輸入所需的里程表值50,然后繼續(xù)單步執(zhí)行腳本,您將獲得以下信息:
概要
- 找出問題的根源
- 設(shè)置斷點(diǎn)
- 逐步完成您的計(jì)劃
- 創(chuàng)建一個(gè) watch
- 評(píng)估一個(gè)表達(dá)