優秀開發者必備技能包:Python偵錯程式
作者 | Roky0429
來源 | Python空間(ID:Devtogether)
人工智慧的現狀及今後發展趨勢如何?
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
寫在之前
不管是之前搞 acm 用 c/c++ 寫演算法還是後來用 Python 寫程式碼,我發現在程式出現問題的時候,大多數人習慣性的用 print 函式列印變數值這種方法來試圖找出問題的癥結所在,這種查詢問題的方式低效到讓人只想刪掉程式碼重新去寫。我記得一些人問我問題的時候,我不止一次的推薦過讓他們用單步除錯去找程式碼中存在的問題,但是更多收穫的是「什麼是單步除錯」這種疑問,其實單步除錯就是,自己去 Google 好麼?
究其源頭還是很多人沒有意識到「除錯程式」的重要性,或者根本不知道這個概念。除錯程式是所有開發人員必須具備的一項重要技能,它可以讓我們一步一步的看到程式的執行過程,幫助我們準確的找到程式中的錯誤。當然這裡我們還是以 Python 為例來說「除錯程式」。
也許會有人說我現在就寫一些短的程式碼,好像也不用這麼麻煩的去除錯程式。如果你只是準備寫一輩子短程式碼,那你確實不用,但是如果你以後一步步的想去做專案了,隨著程式碼量的增加,邏輯的複雜,如果你還是硬撐著用 print 去解決問題,那麼恭喜你,你可能加班加到頭髮光光也不一定能找到問題在哪。所以我希望大家能在一開始就走在正確的道路上,只要稍微花點時間去學習就能掌握的技能為什麼要當作視而不見呢?植髮很貴的!
現在很多的編輯器其實都帶著「除錯程式」的功能,比如寫 c/c++ 的 codeblocks,寫 Python 的 pycharm,這種圖形介面的使用和顯示都相當友好,簡單方便易學,這個不是我這篇文章要講的重點。今天主要是想給大家介紹一下 「Python偵錯程式」,快速定位各種疑難雜症。
Python 偵錯程式
這一部分主要就是想說兩個 Python 偵錯程式,分別是標準庫自帶的 pdb 和開源的 ipdb。
pdb
pdb 是 Python 自帶的庫,為 Python 提供了一種互動式的原始碼除錯功能,包含當前偵錯程式應有的功能,包括設定斷點、單步除錯、檢視原始碼等。其實如果你之前學過 c/c++ 的話,你可能知道 gdb 這個命令列除錯工具,如果你之前用過 gdb,那麼恭喜你你可以直接用 pdb 了,因為這哥倆一個用法。如果你不知道 gdb 也沒事,我們先來看一下 pdb 的部分除錯命令(截圖來自指令碼之家):
這裡有兩種不同的方法來啟動 Python 偵錯程式,兩種方法適用於不同的場景。一種是直接在命令列引數指定使用 pdb 模組啟動 Python 檔案,這種適合於程式碼檔案較短的情況,將在程式碼的第一行啟動 Python 偵錯程式。具體如下所示(例如檔名是 test.py):
python -m pdb test.py
另一種是在 Python 程式碼中呼叫 pdb 模組的 set_trace 方法設定一個斷點,當程式執行到此斷點的時候,程式將會暫停執行並且開啟 pdb 偵錯程式,這種適合於程式碼檔案較大的情況。具體如下所示:
import pdb
def get_sum(n):
cnt = 0
for i in range(n):
pdb.set_trace()
cnt += i
print(cnt)
if __name__ == '__main__':
get_sum(5)
啟動 Python 偵錯程式以後就可以使用上面截圖中的除錯命令進行程式的除錯。比如在接下來的操作中,我們先使用 list 來檢視我們的程式碼,然後使用 p 列印變數當前的取值,最後用 n 執行下一行 Python 程式碼:
ipdb
ipdb 是一個開源的 Python 偵錯程式,其實它和 pdb 的介面是一樣的。那既然一樣的介面,那為啥還要設計個 ipdb 呢?黑格爾曾經說過「存在即合理」,ipdb 相比於 pdb 多了語法高亮,tab 自動補全等友好功能,在易用性方面做了很大的改進,這個感覺就和 Python 和 IPython 一樣。
當然,ipdb 作為一個第三方庫,在使用之前必然要先安裝:
pip install ipdb
我們修改一下之前例子中的 test.py 檔案,修改之後的程式碼如下:
import ipdb
def get_sum(n):
cnt = 0
for i in range(n):
ipdb.set_trace()
cnt += i
print(cnt)
if __name__ == '__main__':
get_sum(5)
具體的操作還是和上面的 pdb 的操作一樣:
你看,上面帶了點兒高亮,是不是順眼了很多?還不趕緊去試試。
(本文為AI科技大本營轉載文章,轉載請聯絡原作者)
60s測試:你是否適合轉型人工智慧?
https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw
群招募
掃碼新增小助手微信,回覆:公司+研究方向(學校+研究方向),邀你加入技術交流群。技術群稽核較嚴,敬請諒解。
推薦閱讀:
點選“閱讀原文”,檢視歷史精彩文章。
相關文章
- 優秀的Java開發人員必備的6個技能!Java
- React開發者必備的技能清單React
- 優秀的DevOps工程師必須具備的軟技能dev工程師
- 現代後端開發者必備技能-2018版後端
- 優秀前端開發工程師必須掌握的七大技能前端工程師
- 開發網站的必備技能網站
- Python的開發必備:如何建立一個優秀的專案工程環境Python
- Python 偵錯程式入門Python
- Rails開發中使用byebug偵錯程式AI
- 精選22個Python實用技巧,秀技能必備這份技術列表!Python
- Android開發者必備的技能你會嗎?MVVM 最新學習心得!AndroidMVVM
- 開發者必備Linux命令Linux
- Java程式設計師必備技能Java程式設計師
- Hacker必備技能
- Java開發需要掌握哪些技術?Java程式設計師必備技能Java程式設計師
- 優秀程式碼的必知必會(一)?
- 前端開發者必備思維前端
- 程式設計師必備Python技能!不會?究竟有多可怕....程式設計師Python
- DBA必備技能之網路丟包分析總結
- AI工程師必備技能 - 凸優化介紹AI工程師優化
- 服務端測試開發必備技能:Mock測試服務端Mock
- 測試開發工程必備技能之一:Mock的使用Mock
- 域名查詢:域名管理者的必備技能
- 掌握11項技能,你就是優秀的前端開發工程師前端工程師
- 新手程式設計師必備10大技能程式設計師
- Python為什麼成為了必備的技能?Python
- 前端開發者必備的程式碼開源平臺,記得收藏轉發!前端
- 前端切圖必備技能前端
- 開發者必備,熱門api介面大全API
- Java 開發者 必備的工具 和 框架Java框架
- Flutter開發者必備手冊 Flutter GoFlutterGo
- 程式設計師必備技能-科學砍需求程式設計師
- Git算不算程式設計師的必備技能?Git程式設計師
- 學習Python必須具備的五大技能!Python
- Xcode偵錯程式LLDBXCodeLLDB
- 測試開發必備技能:安全測試漏洞靶場實戰
- 零基礎學習hadoop開發需要的必備的技能Hadoop
- 程式設計師必備的表情包程式設計師