工欲善其事,必先利其器,。程序猿們往往喜歡挑一個最愛的開發(fā)環(huán)境,。可是Pycharm,,Eclipse,,Komodo,Eric,,WingWare,。。,。這么多Python的IDE看花眼了怎么辦,?即使你用baidu大法選好了一個你滿意的,然后各種秘籍快捷都用熟用爛了,。如果有一天,,我是說如果,你心目中的女神找你幫忙看看代碼,,“你好,,能幫我看一下這個問題是怎么回事嗎?”,,你心想我苦苦修煉的各種招式終于派上用場了,。懷揣著激動和夢想跑過去一看,結(jié)果女神的機器并沒有安裝你用的爛熟的高大上工具,,只有代碼編輯器和終端命令窗口,,這時你該如何讓女神對你刮目相看?不想杯具的話,,就繼續(xù)閱讀吧,。 即使不用IDE你也應(yīng)該有一套自己的獨門秘笈,這里介紹介紹我的,。 1. print大法print大法一定是初學(xué)者首選,。 覺得哪里有問題,就把哪里的變量打印出來看看,。
2. logging工具使用系統(tǒng)庫logging將print改為logging.debug(),,就可以通過配置level達到log分級輸出,。 DEBUG<><><>CRITICAL import logginglogging.basicConfig( level=logging.WARNING, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S' )logging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message') 上面程序運行發(fā)現(xiàn),,log只顯示warning信息。如果再加上filename參數(shù)還能很方便的支持輸出log到文件,,比如: import logginglogging.basicConfig( level=logging.WARNING, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='test.log', filemode='w') 從此我就喜歡上logging,,只在代碼編寫初期順手用一下print 不過有時候我預(yù)先并不知道問題在哪里,我也不是大牛,,我羨慕那些用著支持?jǐn)帱c調(diào)試開發(fā)環(huán)境的猿類,。直到我遇到新的朋友。 3. pdbpdb是python自帶的調(diào)試庫,,當(dāng)我想讓程序停在某個地方,,然后一步一步運行程序并且查看變量時,我只需要加入下面的代碼 a=1 然后有n(ext),,s(tep),,c(ontinue), b(reak),cl(ear)等一系列命令支持,,我就等于有了一套支持?jǐn)帱c調(diào)試的開發(fā)環(huán)境,。 可是這里還是有個問題,就是剛才加入的調(diào)試代碼在release前還要注釋掉,。 pdb的作者一定也考慮了這個問題,。因此有了命令形式進入調(diào)試模式,。 python -m pdb script.py 代碼會在一開始停住,,相當(dāng)于你在程序開始運行第一行加了個斷點。然后用命令b(reak)在你希望的行上加斷點,,然后c(ontinue)就可以啦,。 用了pdb,媽媽再也不用擔(dān)心我調(diào)程序了,??墒前职钟幸蓡柫恕S袝r候程序運行好久忽然崩潰了,,我還不知道它崩在哪里,,意思就是斷點都不知道設(shè)在哪,怎么辦,。 怎樣在崩潰時自動進入調(diào)試模式,,這個問題困擾我很久,直到我學(xué)會上stackoverflow,,發(fā)現(xiàn)這個牛人聚集的地方,。 4. ipython當(dāng)你在有問題的代碼前加上這段代碼,它就可以幫助你在異常時進入ipdb調(diào)試模式,。前提是你要安裝ipython,。 import sys 你也可以把上面的代碼保存成crash_debug.py,,然后在你出問題的文件test.py頭上加上 import crash_debug 執(zhí)行python test.py后輸出如下: 大功告成,。有了這四大法寶,,我就再沒有糾結(jié)過裝哪個開發(fā)環(huán)境的問題,女神再找我,,無需IDE我也能show一把我的抓蟲大法,。 你有什么獨門秘笈,別藏著掖著了,,也拿來分享一下吧,。
注:
|
|