最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用IPython調(diào)試debug程序

 更新時(shí)間:2022年05月14日 10:52:34   作者:皎然CEO  
這篇文章主要為大家介紹了python使用IPython調(diào)試debug程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

關(guān)于IPython使用的入門(mén)文章,主要介紹了如何在程序代碼中嵌入ipython用于調(diào)試,并分析了優(yōu)點(diǎn)與不足。

在 Python 中編程時(shí),我會(huì)花費(fèi)大量時(shí)間使用 IPython 及其強(qiáng)大的交互式提示,不僅用于一些一次性計(jì)算,還用于大量實(shí)際編程和調(diào)試。我特別將它用于一些探索性的編程,比如對(duì)一些不熟悉的 API,或者想知道程序在代碼中特定位置的運(yùn)行狀態(tài)。

我不確定這種IPython調(diào)試的方法有多普遍,但我很少聽(tīng)到其他人談?wù)撍?,所以我認(rèn)為它值得分享。

安裝

使用前,需要將 IPython 安裝到您當(dāng)前的 virtualenv 中:

pip install ipython

使用方法

基本上有兩種方法可以打開(kāi) IPython 提示符。

第一種是直接從終端運(yùn)行它:

$ 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 項(xiàng)目中,如果您安裝了 IPython,也可以使用 ./manage.py shell,好處是它會(huì)為幫您正確初始化 Django。

如果您想探索編寫(xiě)一些“頂級(jí)”代碼,例如,在尚未創(chuàng)建入口點(diǎn)的情況下,編寫(xiě)一個(gè)新的功能,那么這種方法很管用。然而,我寫(xiě)的大部分代碼都不是這樣的。大多數(shù)時(shí)候,我發(fā)現(xiàn)自己需要寫(xiě)代碼時(shí),已經(jīng)想好10層的函數(shù)調(diào)用了——比如:

  • 我正在一個(gè)Django應(yīng)用程序中編寫(xiě)一些視圖代碼,其中有一個(gè)請(qǐng)求對(duì)象--如果你在IPython提示符下從頭開(kāi)始,你不可能輕易重新創(chuàng)建這個(gè)對(duì)象。
  • 或者,模型層代碼,比如 save() 方法內(nèi)部的代碼,該方法本身正在被您尚未編寫(xiě)的其他代碼調(diào)用,比如Django admin或某個(gè)信號(hào)。
  • 或者,在一個(gè)測(cè)試中,設(shè)置代碼已經(jīng)創(chuàng)建了一大堆在打開(kāi)IPython時(shí)不可用的東西。

對(duì)于這些情況,我使用第二種方法:

找到我想要修改、探索或調(diào)試的代碼。這通常是我自己的代碼,但也可能是第三方庫(kù)。我一直習(xí)慣在 virtualenv 中工作,所以即使使用第三方庫(kù),在我的編輯器中“go to definition”也會(huì)直接將我?guī)У酱a的可寫(xiě)副本的定義區(qū)(除了不是用 Python 編寫(xiě)的代碼)。

插入 IPython 提示的代碼并保存文件:

import IPython; IPython.embed()

我將此綁定到編輯器中的一個(gè)功能鍵。
因此,如果它是Django視圖,那么代碼最終可能會(huì)是這樣:

def contact_us(request):
    if request.method == "POST":
        form = ContactUsForm_class(request.POST)
        if form.is_valid():
            import IPython; IPython.embed()
        # …

以適當(dāng)?shù)姆绞接|發(fā)代碼。對(duì)于上述情況,首先需要在終端中運(yùn)行 Django 服務(wù)器,然后打開(kāi)網(wǎng)頁(yè),填寫(xiě)表單并按下提交。對(duì)于測(cè)試,它將從終端運(yùn)行特定的測(cè)試。對(duì)于命令行應(yīng)用程序,它將直接運(yùn)行應(yīng)用程序。

在終端中,我會(huì)發(fā)現(xiàn)自己現(xiàn)在已經(jīng)在 IPython REPL 中,我可以繼續(xù):

  • 想出我需要寫(xiě)什么代碼
  • 或者調(diào)試我感到困惑的代碼

請(qǐng)注意,您可以在此 REPL 中編寫(xiě)和編輯多行代碼——它不像編輯器那么舒服,但沒(méi)關(guān)系,并且具有良好的歷史記錄支持。關(guān)于 IPython 及其更多特性,你可以在官方 文檔 中了解它。

對(duì)于那些有其他語(yǔ)言背景的人來(lái)說(shuō),可能還值得指出的是,Python REPL 與普通 Python 并沒(méi)有什么不同。你可以在普通 Python 中做的所有事情,比如定義函數(shù)和類(lèi),都可以在 REPL 中進(jìn)行。

調(diào)試結(jié)束后,我可以將任何有用的片段從 REPL 復(fù)制回我的真實(shí)代碼中,使用歷史記錄來(lái)查看我曾經(jīng)輸入的內(nèi)容。

優(yōu)點(diǎn)

這種方法的優(yōu)點(diǎn)是:

  • 當(dāng)您實(shí)際擁有一個(gè)對(duì)象時(shí),您可以更輕松地探索API和對(duì)象(APIs and objects),而不是閱讀關(guān)于對(duì)象的文檔,或者編輯器的自動(dòng)完成工具推斷對(duì)象應(yīng)該具有的內(nèi)容。例如,Django的HttpRequest上有哪些屬性和方法?你不必確保你有正確的類(lèi)型注釋?zhuān)⑶蚁M鼈兪峭暾?,或者假設(shè)值是什么——你已經(jīng)有了對(duì)象,你可以檢查它,用廣泛的合適的制表符自動(dòng)補(bǔ)全完成。你可以調(diào)用函數(shù),看看它們是怎么做的。
    例如,Django的請(qǐng)求對(duì)象通常有一個(gè)用戶(hù)(user)屬性,該屬性不屬于HttpRequest定義的一部分,因?yàn)樗窃谝院筇砑拥?。但它在REPL中是可見(jiàn)的。
  • 您可以直接探索程序的整體狀態(tài)。這對(duì)于探索性編程和調(diào)試來(lái)說(shuō)都是一個(gè)巨大的優(yōu)勢(shì)。
    對(duì)于調(diào)試,pdb 和類(lèi)似的調(diào)試工具和環(huán)境通常會(huì)為您提供“the state of the system”,并且它們更擅長(zhǎng)單步執(zhí)行多層代碼。但我經(jīng)常發(fā)現(xiàn) IPython 提示的功能和舒適性對(duì)于探索和尋找解決方案要好得多。

這種環(huán)境的感覺(jué)并不像Lisp中REPL驅(qū)動(dòng)的編程那樣流暢,但我仍然覺(jué)得它非常有趣和高效。與許多其他方法相比,比如迭代代碼,然后進(jìn)行手動(dòng)或自動(dòng)測(cè)試,它將反饋循環(huán)的延遲從幾秒或幾分鐘減少到幾毫秒,這是巨大的效率提升。

提示和不足

IPython 有很多很酷的特性可以在 REPL 環(huán)境中幫助你,比如 %autoreload 和許多其他很酷的魔法。你應(yīng)該花時(shí)間去了解他們!

在多線(xiàn)程(或多進(jìn)程)環(huán)境中,IPython 提示表現(xiàn)不是很好。如果可能的話(huà),關(guān)閉多線(xiàn)程,或者確保你沒(méi)有遇到那個(gè)問(wèn)題。

如果您確實(shí)在終端中搞砸了,您可能需要手動(dòng)找到要?dú)⑺赖倪M(jìn)程并在終端中進(jìn)行重置。

使用 Django 開(kāi)發(fā)服務(wù)器:

  • 它默認(rèn)是多線(xiàn)程的,所以要么確保你不會(huì)多次點(diǎn)擊視圖代碼,要么使用 --nothreading。
  • 當(dāng)心自動(dòng)重新加載,如果你在啟動(dòng)時(shí)仍然處于 IPython 提示符中,它會(huì)搞砸你。要么使用 --noreload 要么確保在執(zhí)行任何會(huì)觸發(fā)重新加載的操作之前干凈地退出 IPython。

當(dāng)心捕獲標(biāo)準(zhǔn)輸入/輸出的環(huán)境,這會(huì)破壞這種功能。

pytest 默認(rèn)捕獲標(biāo)準(zhǔn)輸入并破壞一些事物。您可以使用 -s 將其關(guān)閉。此外,如果您使用的是 pytest-xdist,您應(yīng)該記得使用 -n0 來(lái)關(guān)閉多個(gè)進(jìn)程。

使用 IPython.embed() 時(shí),由于 Python 的限制,存在一個(gè)煩人的錯(cuò)誤,涉及閉包和未定義的名稱(chēng)。它經(jīng)常在使用生成器表達(dá)式時(shí)出現(xiàn),但在其他時(shí)候也是如此。它通??梢酝ㄟ^(guò)以下方式解決:

globals().update(locals())

參考鏈接

以上就是python使用IPython調(diào)試debug程序的詳細(xì)內(nèi)容,更多關(guān)于IPython調(diào)試debug的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python數(shù)據(jù)處理利器Slice函數(shù)用法詳解

    Python數(shù)據(jù)處理利器Slice函數(shù)用法詳解

    這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理利器Slice函數(shù)用法的相關(guān)資料,slice函數(shù)是Python中的一個(gè)內(nèi)置函數(shù),用于對(duì)序列進(jìn)行切片操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • python工廠方法模式原理與實(shí)現(xiàn)

    python工廠方法模式原理與實(shí)現(xiàn)

    大家好,本篇文章主要講的是python工廠方法模式原理與實(shí)現(xiàn),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-02-02
  • python學(xué)習(xí)之第三方包安裝方法(兩種方法)

    python學(xué)習(xí)之第三方包安裝方法(兩種方法)

    這篇文章主要介紹了python學(xué)習(xí)之第三方包安裝方法,最近在學(xué)習(xí)QQ空間、微博(爬蟲(chóng))模擬登錄,都涉及到了RSA算法。這樣需要下一個(gè)RSA包(第三方包),在網(wǎng)上搜了好多資料,在此做了總結(jié),需要的朋友可以參考下
    2015-07-07
  • Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類(lèi)

    Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類(lèi)

    這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類(lèi),這是基礎(chǔ)學(xué)習(xí)的第三篇內(nèi)容,小編已把前兩篇鏈接放在下面,需要學(xué)習(xí)的同學(xué)可以參考一下
    2022-05-05
  • python簡(jiǎn)單實(shí)現(xiàn)AES加密和解密

    python簡(jiǎn)單實(shí)現(xiàn)AES加密和解密

    這篇文章主要為大家詳細(xì)介紹了python簡(jiǎn)單實(shí)現(xiàn)AES加密和解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python將視頻轉(zhuǎn)換為圖片介紹

    Python將視頻轉(zhuǎn)換為圖片介紹

    大家好,本篇文章主要講的是Python將視頻轉(zhuǎn)換為圖片介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01
  • python 不關(guān)閉控制臺(tái)的實(shí)現(xiàn)方法

    python 不關(guān)閉控制臺(tái)的實(shí)現(xiàn)方法

    在win32下,雙擊python程序會(huì)打開(kāi)dos窗口,但是執(zhí)行完畢后就會(huì)關(guān)閉,看不到輸出的結(jié)果
    2011-10-10
  • 對(duì)numpy中軸與維度的理解

    對(duì)numpy中軸與維度的理解

    下面小編就為大家分享一篇對(duì)numpy中軸與維度的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python自動(dòng)化生成IOS的圖標(biāo)

    python自動(dòng)化生成IOS的圖標(biāo)

    這篇文章主要為大家詳細(xì)介紹了python如何自動(dòng)化生成IOS的圖標(biāo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 基于python定位棋子位置及識(shí)別棋子顏色

    基于python定位棋子位置及識(shí)別棋子顏色

    本文主要介紹了python定位棋子位置及識(shí)別棋子顏色,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

潮州市| 滦南县| 汕尾市| 荔浦县| 锦屏县| 长汀县| 昭平县| 南江县| 太康县| 双流县| 昭平县| 沙雅县| 濮阳县| 德格县| 黄浦区| 泗洪县| 高雄县| 华蓥市| 浦东新区| 东光县| 徐闻县| 平顺县| 彝良县| 宿州市| 定安县| 麻栗坡县| 顺平县| 连云港市| 清丰县| 仁化县| 丰宁| 巴南区| 凤城市| 东乡县| 班戈县| 绵竹市| 冷水江市| 吉隆县| 沭阳县| 博爱县| 南江县|