Python學習筆記__8.2章 調試
1、概覽
如何在程序出錯時,知道哪些變量的值是正確的,哪些變量的值是錯誤的。
1.1、print()
用print()把可能有問題的變量打印出來
def foo(s):
n = int(s)
print('>>> n = %d' % n)
return 10 / n
1.2、斷言
凡是用print()來輔助查看的地方,都可以用斷言(assert)來替代:
def foo(s):
n = int(s)
assert n != 0, 'n is zero!' # n!=0,才能繼續向後執行。
return 10 / n
如果斷言失敗,assert語句本身就會拋出AssertionError。
為了執行程序的美觀,啟動Python解釋器時可以用-O參數來關閉assert
$ python -O err.py
1.3、logging
把print()替換為logging是第3種方式,和assert比,logging不會拋出錯誤,而且可以輸出到文件。
import logging
# 指定記錄信息的級別,有debug,info,warning,error等幾個級別。
# 後面的級別,會使前面的級別失效。如info會使debug失效
logging.basicConfig(level=logging.INFO)
s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)
1.4、pdb
啟動Python的調試器pdb,讓程序以單步方式運行,可以隨時查看運行狀態
$ python -m pdb err.py
> /Users/michael/Github/learn-python3/samples/debug/err.py(2)<module>()
-> s = '0' #自動將第一行打印出來
(Pdb) # 變為等待輸入指令的調試模式
常用指令有:
1:查看代碼
n:單步執行
p:接變量名,查看變量
q:退出
1.5、pdb.set_trace()
這個方法也是用pdb,但是不需要單步執行。我們需要import pdb,然後,在可能出錯的地方放一個pdb.set_trace(),就可以設置一個斷點。
# err.py
import pdb
s = '0'
n = int(s)
pdb.set_trace() # 運行到這裏會自動暫停
print(10 / n)
暫停後,會進入Pdb調試模式。p 查看變量,c 繼續運行
1.6、IDE(集成環境)
目前比較好的Python IDE有:
Visual Studio Code:https://code.visualstudio.com/,需要安裝Python插件。
PyCharm:http://www.jetbrains.com/pycharm/
2、擴展文檔
python logging模塊 (http://www.cnblogs.com/dahu-daqing/p/7040764.html)
Python學習筆記__8.2章 調試