《利用Python進(jìn)行數(shù)據(jù)分析》 附錄 B.3 軟件開發(fā)工具

附錄B 更多IPython系統(tǒng)相關(guān)內(nèi)容


B.3 軟件開發(fā)工具

?????? 除了為交互式計(jì)算和數(shù)據(jù)探索提供舒適的環(huán)境外,IPython還可以成為通用Python軟件開發(fā)的伴侶。在數(shù)據(jù)分析應(yīng)用程序中铐伴,首先,代碼的正確性非常重要。幸運(yùn)的是续扔, IPython緊密集成并增強(qiáng)了內(nèi)置的Python pdb調(diào)試器。其次焕数,你希望你的代碼更快纱昧。為此,IPython擁有易于使用的代碼測時(shí)和分析工具堡赔。我將在這里詳細(xì)介紹這些工具识脆。


B.3.1 交互式調(diào)試器

??????? IPython的調(diào)試器對(duì)pdb進(jìn)行了加強(qiáng),加強(qiáng)的地方包括tab鍵補(bǔ)全、語法高亮以及異炒媪В回溯中每一行的上下文仑荐。調(diào)試代碼的最佳時(shí)機(jī)之一就是在發(fā)生錯(cuò)誤之后。在異常發(fā)生后立刻輸入%debug命令纵东,可以喚起"后現(xiàn)代"調(diào)試器并讓你進(jìn)入拋出異常的堆棧區(qū)(見圖1)

圖1

??????? 一旦進(jìn)入調(diào)試器粘招,你就可以執(zhí)行任意Python代碼,并探索每個(gè)堆棧區(qū)內(nèi)的所有對(duì)象和數(shù)據(jù)(數(shù)據(jù)由解釋器“保持活動(dòng)狀態(tài)”)偎球。默認(rèn)情況下洒扎,你從最底層開始,那里是錯(cuò)誤發(fā)生的地方衰絮。通過按u(上)d(下)袍冷,你可以在堆棧回溯的不同層級(jí)間切換(見圖2)

圖2

?????? 執(zhí)行% pdb命令可以使IPython在任何異常之后自動(dòng)調(diào)用調(diào)試器猫牡,許多用戶認(rèn)為這個(gè)命令特別有用胡诗。

?????? 使用調(diào)試器來幫助開發(fā)代碼也很容易,特別是當(dāng)你希望設(shè)置斷點(diǎn)或單步執(zhí)行函數(shù)或腳本來檢查每個(gè)階段的狀態(tài)時(shí)淌友。有多種方式可以實(shí)現(xiàn)這個(gè)功能煌恢。第一種方式是使用%run命令和-d標(biāo)志,這種方式在執(zhí)行所有傳遞的腳本中的代碼前喚起調(diào)試器震庭。你必須立刻按下s(step)來進(jìn)入腳本瑰抵。

?????? 在這之后,如何處理文件將取決于你自己器联。例如二汛,在之前的異常中,我們可以在調(diào)用works_fine方法前設(shè)置一個(gè)斷點(diǎn)拨拓,然后我們按下c(continue肴颊,繼續(xù))運(yùn)行程序直到我們達(dá)到斷點(diǎn)處。(見圖3)

圖3

??????? 這時(shí)候千元,可以step(單步)進(jìn)入works_fine()或按下n(next苫昌,下一行)執(zhí)行works_fine()并進(jìn)行到下一行(見圖4)

圖4

?????? 然后我們進(jìn)入throws_an_exception,再進(jìn)入到錯(cuò)誤發(fā)生的行檢查范圍內(nèi)的變量幸海。請(qǐng)注意祟身,調(diào)試器命令優(yōu)先于變量名稱。在這種情況下物独,變量前面加上袜硫!來檢查變量的內(nèi)容(見圖5)

圖5

?????? 對(duì)交互式調(diào)試器的熟練程度在很大程度上取決于實(shí)踐和經(jīng)驗(yàn)。有關(guān)調(diào)試器命令的完整目錄挡篓,請(qǐng)參見表B-2婉陷。如果你習(xí)慣于使用IDE帚称,那么您可能會(huì)發(fā)現(xiàn)終端驅(qū)動(dòng)的調(diào)試器起初有點(diǎn)不習(xí)慣,但這會(huì)隨著時(shí)間的推移而改進(jìn)秽澳。一些Python IDE具有出色的GUI調(diào)試器闯睹,所以大多數(shù)用戶可以找到適合他們的東西。

表B-2:(I)Python調(diào)試器命令

B.3.1.1 調(diào)試器的其他用途

?????? 有幾個(gè)其他有用的方法來調(diào)用調(diào)試器担神。第一種方法是使用一個(gè)特殊的set_trace函數(shù)(以pdb.set_trace命名)楼吃,該函數(shù)基本上是一個(gè)“窮人的斷點(diǎn)”。這里有兩個(gè)小技巧妄讯,你可能希望將這些技巧放在某處用于常規(guī)使用(也可以像我這樣將它們添加到IPython配置文件中):

?????? 第一個(gè)函數(shù)set_trace是非常簡單的孩锡。你可以在代碼的任何部分使用set_trace來臨時(shí)停止,以便更仔細(xì)地檢查代碼(例如在異常發(fā)生前):

?????? 按c(continue亥贸,繼續(xù))將導(dǎo)致代碼恢復(fù)正常躬窜,不會(huì)造成任何損害。

?????? 我們剛剛查看的debug函數(shù)允許你在任意函數(shù)調(diào)用中輕松喚起交互式調(diào)試器炕置。假設(shè)我們已經(jīng)寫了如下的函數(shù)荣挨,并且我們希望單步運(yùn)行通過它的邏輯:

?????? 調(diào)試器可以與% run結(jié)合使用。通過使用% run-d運(yùn)行腳本讹俊,你將直接進(jìn)入到調(diào)試器中垦沉,隨時(shí)可以設(shè)置任何斷點(diǎn)并啟動(dòng)腳本:

??????? 用行號(hào)加上-b會(huì)啟動(dòng)一個(gè)已經(jīng)設(shè)置了斷點(diǎn)的調(diào)試器:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仍劈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寡壮,老刑警劉巖贩疙,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異况既,居然都是意外死亡这溅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門棒仍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悲靴,“玉大人,你說我怎么就攤上這事莫其●校” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乱陡,是天一觀的道長浇揩。 經(jīng)常有香客問我,道長憨颠,這世上最難降的妖魔是什么胳徽? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任积锅,我火速辦了婚禮,結(jié)果婚禮上养盗,老公的妹妹穿的比我還像新娘缚陷。我一直安慰自己,他們只是感情好往核,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布蹬跃。 她就那樣靜靜地躺著,像睡著了一般铆铆。 火紅的嫁衣襯著肌膚如雪蝶缀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天薄货,我揣著相機(jī)與錄音翁都,去河邊找鬼。 笑死谅猾,一個(gè)胖子當(dāng)著我的面吹牛柄慰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播税娜,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坐搔,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了敬矩?” 一聲冷哼從身側(cè)響起概行,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弧岳,沒想到半個(gè)月后凳忙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡禽炬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年涧卵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腹尖。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柳恐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出热幔,到底是詐尸還是另有隱情乐设,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布断凶,位于F島的核電站伤提,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏认烁。R本人自食惡果不足惜肿男,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一介汹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舶沛,春花似錦嘹承、人聲如沸竿音。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绅作。三九已至坪它,卻和暖如春骤竹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背往毡。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蒙揣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人开瞭。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓懒震,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嗤详。 傳聞我的和親對(duì)象是個(gè)殘疾皇子个扰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容