使用 Python 偵錯程式(Pdb)
最基本的 Django 除錯工具是 pdb ,它是 Python 標準庫的一部分。
初始化檢視指令碼
我們來看一個簡單的 views.py
指令碼:
from django.http import HttpResponse
def index(request):
foo = 1
bar = 0
bug = foo/bar
return HttpResponse("%d goes here." % bug)
用於執行伺服器的 Console 命令:
python manage.py runserver
很明顯,當你嘗試載入索引頁面時,Django 會丟擲一個 ZeroDivisionError
,但是如果我們假裝程式碼中的 bug 很深,那麼它可能會變得非常討厭。
設定斷點
幸運的是,我們可以設定斷點來追蹤該錯誤:
from django.http import HttpResponse
# Pdb import
import pdb
def index(request):
foo = 1
bar = 0
# This is our new breakpoint
pdb.set_trace()
bug = foo/bar
return HttpResponse("%d goes here." % bug)
使用 pdb 執行伺服器的控制檯命令:
python -m pdb manage.py runserver
現在頁面載入斷點將在 shell 中觸發(Pdb)提示,這也會使瀏覽器掛起處於掛起狀態。
使用 pdb shell 進行除錯
是時候通過 shell 與指令碼互動除錯該檢視了:
> ../views.py(12)index()
-> bug = foo/bar
# input 'foo/bar' expression to see division results:
(Pdb) foo/bar
*** ZeroDivisionError: division by zero
# input variables names to check their values:
(Pdb) foo
1
(Pdb) bar
0
# 'bar' is a source of the problem, so if we set it's value > 0...
(Pdb) bar = 1
(Pdb) foo/bar
1.0
# exception gone, ask pdb to continue execution by typing 'c':
(Pdb) c
[03/Aug/2016 10:50:45] "GET / HTTP/1.1" 200 111
在最後一行中,我們看到我們的檢視返回了一個 OK
響應並按預期執行。
要停止 pdb 迴圈,只需在 shell 中輸入 q
即可。