<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
關於IPython使用的入門文章,主要介紹瞭如何在程式程式碼中嵌入ipython用於偵錯,並分析了優點與不足。
在 Python 中程式設計時,我會花費大量時間使用 IPython 及其強大的互動式提示,不僅用於一些一次性計算,還用於大量實際程式設計和偵錯。我特別將它用於一些探索性的程式設計,比如對一些不熟悉的 API,或者想知道程式在程式碼中特定位置的執行狀態。
我不確定這種IPython偵錯的方法有多普遍,但我很少聽到其他人談論它,所以我認為它值得分享。
使用前,需要將 IPython 安裝到您當前的 virtualenv 中:
pip install ipython
基本上有兩種方法可以開啟 IPython 提示符。
第一種是直接從終端執行它:
$ ipython Python 3.9.5 (default, Jul 1 2021, 11:45:58) Type 'copyright', 'credits' or 'license' for more information IPython 8.3.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
在 Django 專案中,如果您安裝了 IPython,也可以使用 ./manage.py shell
,好處是它會為幫您正確初始化 Django。
如果您想探索編寫一些“頂級”程式碼,例如,在尚未建立入口點的情況下,編寫一個新的功能,那麼這種方法很管用。然而,我寫的大部分程式碼都不是這樣的。大多數時候,我發現自己需要寫程式碼時,已經想好10層的函數呼叫了——比如:
save()
方法內部的程式碼,該方法本身正在被您尚未編寫的其他程式碼呼叫,比如Django admin或某個訊號。對於這些情況,我使用第二種方法:
找到我想要修改、探索或偵錯的程式碼。這通常是我自己的程式碼,但也可能是第三方庫。我一直習慣在 virtualenv 中工作,所以即使使用第三方庫,在我的編輯器中“go to definition”也會直接將我帶到程式碼的可寫副本的定義區(除了不是用 Python 編寫的程式碼)。
插入 IPython 提示的程式碼並儲存檔案:
import IPython; IPython.embed()
我將此係結到編輯器中的一個功能鍵。
因此,如果它是Django檢視,那麼程式碼最終可能會是這樣:
def contact_us(request): if request.method == "POST": form = ContactUsForm_class(request.POST) if form.is_valid(): import IPython; IPython.embed() # …
以適當的方式觸發程式碼。對於上述情況,首先需要在終端中執行 Django 伺服器,然後開啟網頁,填寫表單並按下提交。對於測試,它將從終端執行特定的測試。對於命令列應用程式,它將直接執行應用程式。
在終端中,我會發現自己現在已經在 IPython REPL 中,我可以繼續:
請注意,您可以在此 REPL 中編寫和編輯多行程式碼——它不像編輯器那麼舒服,但沒關係,並且具有良好的歷史記錄支援。關於 IPython 及其更多特性,你可以在官方 檔案 中瞭解它。
對於那些有其他語言背景的人來說,可能還值得指出的是,Python REPL 與普通 Python 並沒有什麼不同。你可以在普通 Python 中做的所有事情,比如定義函數和類,都可以在 REPL 中進行。
偵錯結束後,我可以將任何有用的片段從 REPL 複製回我的真實程式碼中,使用歷史記錄來檢視我曾經輸入的內容。
這種方法的優點是:
這種環境的感覺並不像Lisp中REPL驅動的程式設計那樣流暢,但我仍然覺得它非常有趣和高效。與許多其他方法相比,比如迭代程式碼,然後進行手動或自動測試,它將反饋迴圈的延遲從幾秒或幾分鐘減少到幾毫秒,這是巨大的效率提升。
IPython 有很多很酷的特性可以在 REPL 環境中幫助你,比如 %autoreload 和許多其他很酷的魔法。你應該花時間去了解他們!
在多執行緒(或多程序)環境中,IPython 提示表現不是很好。如果可能的話,關閉多執行緒,或者確保你沒有遇到那個問題。
如果您確實在終端中搞砸了,您可能需要手動找到要殺死的程序並在終端中進行重置。
使用 Django 開發伺服器:
當心捕獲標準輸入/輸出的環境,這會破壞這種功能。
pytest 預設捕獲標準輸入並破壞一些事物。您可以使用 -s 將其關閉。此外,如果您使用的是 pytest-xdist,您應該記得使用 -n0 來關閉多個程序。
使用 IPython.embed() 時,由於 Python 的限制,存在一個煩人的錯誤,涉及閉包和未定義的名稱。它經常在使用生成器表示式時出現,但在其他時候也是如此。它通常可以通過以下方式解決:
globals().update(locals())
以上就是python使用IPython偵錯debug程式的詳細內容,更多關於IPython偵錯debug的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45