前言:
最近新手小白 終於開始用Python 來寫一些量化分析的程式了(下次就跟大家分享)
但沒想到才剛起步就翻車
其實寫程式本來就是在bug中不停地修改
例如 資料格式阿~套件的函數阿~邏輯的順序阿~甚至是變數忘了給
都有可能發生
新手小白之前是有接觸R 所以大概知道怎麼去 debug
但Python就不知道要怎麼用了~~
請教了google大神和新手小白的朋友之後
才知道 有一個 pdb 的包 可以簡單的去debug
它功能很多 如果想詳細研讀的話可以參考 官網的文件
https://docs.python.org/3.5/library/pdb.html#pdbcommand-next
這邊新手小白就用簡單的example 來講講這個 pdb 要怎麼簡單的來使用
正文:
首先 我先定義一個有問題的 fun 給大家看
這是一個在檢查 數列是不是偶數的 fun
import numpy as np
import pandas as pd
import pdb # 先 import 今天要介紹的套件
qq=[];
def fun1(x):
for ind in np.arange(x):
if qq[ind] % 2 ==0:
qq.append(ind);
return qq
大家可以試著compile ,儘管裡面寫錯它都是會給過的~~
然而我們實際執行看看 例如 fun1(20)
這邊可以看出來 Python 其實是很友善的
當有error 的時候 它會跟你說是哪一行發生錯誤(黃框的部分)
並且錯誤的原因是什麼 如果只是小問題的話~
那其實參考它的提示 直接改就可以了
不過我們來試試 pdb 來解bug吧
簡單的用法是 先在發生 bug 的前一行
加入這個指令來設停止點 pdb.set_trace()
也就是
def fun1(x):
for ind in np.arange(x):
pdb.set_trace()
if qq[ind] % 2 ==0:
qq.append(ind);
return qq
然後再一次執行 我剛剛的fun1(20)
你會發現它多出了一個框框 而且可以讓你輸入東西
這就是pdb的特殊環境
以我的fun1 為例 我想知道這邊哪邊錯了 就可以試試把變數都教出來看看
直接打在 框框裡就好了
例如 我想知道 qq是甚麼 :
它就顯示出 阿~qq是一個空的 list
所以我搞錯囉~~ 因為我是想知道
我的fun1中的for loop 每次的 ind 這個變數是不是偶數~~
所以正確的程式應該把
qq[ind] % 2 這句改成 ind % 2
這樣才是正確的 因此 我就debug 完了
那要怎麼離開 pdb的環境呢 很簡單 打 q 就好了
它會顯示一些操作紀錄的東西 不過新手小白沒有用到這些
那我改完的程式就長這樣囉 output也和我預期的相同
注意: 我離開 pdb 環境後再按run 有的時候output不會出來的? 有的時候又可以
我知道的解決辦法是 按選單的 kernel => Restart & Clear Output => 再按run
今天就分享到這邊囉 感謝大家
如有不足 歡迎在下邊的留言板上 寫上您的建議
補充:
上面就是簡單的 debug 方法了
( 設停止點 => 看看變數是不是出了問題 => 找到問題並修正)
但其實pdb 環境 還有一些特別語法 新手小白覺得挺酷的 大家可以試試
例如
q => 離開 pdb 環境的時候, 剛有使用過 ( 一定會用到啦 除非你改完之後重開XD )
r => 繼續執行, 直到下一個停止點 ( 再遇到迴圈的時候很常用 )
n => 執行下一行程式
s => 進入函式(新手小白有試過 它會進到fun 裡面的fun 只是不知道要怎麼回去... )
p(變數名稱) => 印出變數 和 print 一樣,就是比較方便而已
l => 列出目前的程式片段,這我就沒試過囉
留言列表