還記得在上一個教程中,你創(chuàng)建并運行了 Car 腳本嗎?讓我們再和它玩一會兒。
在運行工具窗口中運行腳本,加速一次汽車,然后通過輸入相應(yīng)的命令進行兩次制動:
現(xiàn)在按 o
然后按 Enter
來顯示汽車的里程表:
腳本告訴我們汽車行駛了 0 公里!這是一個意外的結(jié)果,因為我們按了一次加速器,所以汽車應(yīng)該已經(jīng)行駛了一段距離。讓我們調(diào)試代碼以找出原因。
要開始調(diào)試,你必須先設(shè)置一個斷點。調(diào)試器將在執(zhí)行帶有斷點的行之前停止,這樣你就可以檢查程序的當前狀態(tài)。
汽車的里程表設(shè)置在第 15 行,所以讓我們在那里設(shè)置一個斷點。點擊行號旁邊的空白處:
接下來,點擊 main
子句旁邊的
圖標,然后選擇調(diào)試 'car'(Debug `car`)。
PyCharm 開始調(diào)試會話并顯示調(diào)試工具窗口。
按 a
然后按 Enter
來加速汽車。調(diào)試器將執(zhí)行腳本并在斷點處停止。調(diào)試工具窗口的線程和變量標簽頁將打開。展開 self
以檢查變量的當前值:
點擊調(diào)試工具欄上的
“單步跳過(Step Over)” 按鈕,以執(zhí)行帶有斷點的行。注意 ?
? 的值變?yōu)?5,第 16 行現(xiàn)在在編輯器中高亮顯示,因為它將是下一個要執(zhí)行的行:里程表(
?odometer
?)
現(xiàn)在點擊
“繼續(xù)(Resume)” 按鈕并切換到 Debug 調(diào)試工具窗口的控制臺標簽頁。通過按
b
然后按 Enter
來指示汽車制動?;氐骄€程和變量標簽頁并檢查變量。注意此時速度為 0。
再次點擊 “繼續(xù)” 按鈕并再次制動(
b
+ Enter
)?,F(xiàn)在,讓我們切換到線程和變量標簽頁并分析接下來會發(fā)生什么:
你可以看到,里程表
的值是 5,速度
的值是 -5。這就是為什么當我們恢復(fù)執(zhí)行時,里程表
將變?yōu)?0。你可以點擊工具欄上的 按鈕來確認這一點。
所以,意外結(jié)果的原因是 速度(speed)
變量的負值。
為了避免再次遇到同樣的問題,讓我們更新 Car
的 brake
方法,使其不會將 速度
減少到負值。
選擇 brake
方法中的語句 self.speed -= 5
,然后按 Ctrl
+ Alt
+ T
(代碼 -> 包圍Surround with)。
選擇 if 來為該語句添加條件。
PyCharm 創(chuàng)建了一個占位符 if 構(gòu)造,留下你來填充適當?shù)膬?nèi)容。
輸入 self.speed >= 5
。我們在代碼中指定了 brake
方法只有在 速度
大于或等于 5 時才扣除 5:
def brake(self):
if self.speed >=5:
self.speed -=5
那么速度低于 5 怎么辦?當你在現(xiàn)實生活中對一輛緩慢行駛的汽車進行制動時,它只是停下來。讓我們在代碼中指定這一點。
在 brake
方法的最后一行后添加一行新代碼并開始輸入 el...
。PyCharm 提示你插入 else
。按 Enter
插入它,縮進將自動修復(fù):
現(xiàn)在添加 self.speed = 0
以指定汽車應(yīng)該停止。以下是更新后的 brake
方法代碼:
def brake(self):
if self.speed >=5:
self.speed -=5
else:
self.speed =0
讓我們再次運行以檢查是否成功修復(fù)了問題。加速汽車,然后進行兩次制動,并檢查里程表:
現(xiàn)在我們得到了預(yù)期的正確結(jié)果。
調(diào)試工具窗口由用于幀、變量和觀察的專用窗格以及顯示所有輸入和輸出信息的控制臺標簽頁組成。如果你想讓控制臺始終可見,可以將其拖到 PyCharm 窗口的邊緣之一。
如果你想一行一行地查看代碼的執(zhí)行情況,無需在每一行都設(shè)置斷點,可以逐步執(zhí)行代碼。
讓我們看看在示例程序中逐步執(zhí)行是什么樣子。通過窗口頂部的運行小部件啟動或重新啟動調(diào)試器:
在打開的調(diào)試器控制臺中,按 a
加速汽車。調(diào)試器將在斷點處停止。
我們可以使用逐步調(diào)試工具欄按鈕來選擇下一步在哪個行停止。
例如,點擊單步跳過(Step Over) 按鈕,查看藍色標記移動到下一行代碼:
繼續(xù)點擊 ,直到到達
action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper()
。
現(xiàn)在,如果你點擊單步進入(Step Into)按鈕,你會看到調(diào)試器進入 parse.py 文件:
但是,如果你繼續(xù)使用單步跳過 ,你會看到你的應(yīng)用程序只是繼續(xù)下一個循環(huán):
如果你想專注于自己的代碼,使用單步進入我的代碼(Step Into My Code)按鈕。這樣你將避免進入庫類。
有關(guān)更多信息,請參考逐步調(diào)試工具欄和單步調(diào)試程序。
PyCharm 允許你觀察任何變量。只需在評估表達式或在線程和變量標簽頁下的工具欄下方的添加觀察字段中輸入要觀察的變量名稱。例如,my_car.time
。這里提供代碼補全。然后點擊字段右側(cè)的。
然后轉(zhuǎn)到控制臺標簽頁并輸入任何命令,例如,b
。
當你回到線程和變量標簽頁時,你會看到 my_car.time
的當前值:
有關(guān)更多信息,請參考觀察。
你可能已經(jīng)注意到 PyCharm 的另一個功能,它使查看代碼執(zhí)行情況變得更加容易:內(nèi)聯(lián)調(diào)試器。只要你按下任何斷點,PyCharm 就會在編輯器中顯示許多變量的值:
此內(nèi)聯(lián)調(diào)試功能默認啟用。如果你沒有看到內(nèi)聯(lián)調(diào)試值,請檢查它是否在調(diào)試器設(shè)置中啟用。點擊調(diào)試器(Debugger)工具欄上的,然后選擇調(diào)試器設(shè)置(Debugger Settings )。確保在編輯器中顯示變量值(Show Variable Values in Editor)已啟用。
所以,你已經(jīng)做到了!恭喜!讓我們回顧一下你在 PyCharm 的幫助下所做的事情:
更多建議: