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

詳解Python調(diào)試神器之PySnooper

 更新時間:2021年11月11日 08:49:30   作者:Python學習與數(shù)據(jù)挖掘  
在程序開發(fā)過程中,代碼的運行往往會和我們預期的結果有所差別。于是,我們需要清楚代碼運行過程中到底發(fā)生了什么?代碼哪些模塊運行了,哪些模塊沒有運行?輸出的局部變量是什么樣的?PySnooper,能夠大大減少調(diào)試過程中的工作量

相信很多程序員在調(diào)試代碼時,都用過 print。代碼少還好說,如果是大型項目,面對眾多 print 的輸出結果,可能要頭大了。

今天推薦一個 GitHub 熱門開源項目:PySnooper。該項目推出的第一天就收獲 2000+ Star,登上了 GitHub 日榜第一位,如今有近 15k Star??梢娺@是一款 Python 開發(fā)者喜歡的工具。歡迎收藏學習、喜歡點贊支持,文末技術交流可以暢聊!

圖片

鏈接:https://github.com/cool-RR/PySnooper

PySnooper 是個什么東西?

如果你寫的 Python 代碼不能按如期那樣運行,你會絞盡腦汁想為啥出錯了。雖然你希望有支持斷點的成熟調(diào)試器,但或許你現(xiàn)在不想去設置這樣的調(diào)試器。

你想知道哪些行代碼是正常運行,哪些行不正常。據(jù)說大多數(shù)人會在可疑位置使用 print 輸出語句。

其實 PySnooper 的作用有點類似,你不用小心翼翼地用 print 輸出,只需在想調(diào)試的函數(shù)中引入一個裝飾器。然后得到函數(shù)的詳細日志,包括運行了哪些行、何時運行,以及何時更改了局部變量。

為什么 PySnooper 能從其他智能調(diào)試工具中脫穎而出?

因為你可以在不需要進行任何設置的情況下將其用于糟糕的、龐大的企業(yè)代碼庫中。只需打開裝飾器(如下示例所示),并將輸出重定向到一個專用的日志文件,將日志文件路徑指定為第一個參數(shù)。

PS:如果無法訪問 stderr,那可以將輸出重定向到指定文件,比如 :@pysnooper.snoop('/my/log/file.log')

使用范例

范例是一個把數(shù)字轉成二進制的函數(shù)。

import pysnooper

@pysnooper.snoop()
def number_to_bits(number):
    if number:
        bits = []
        while number:
            number, remainder = divmod(number, 2)
            bits.insert(0, remainder)
        return bits
    else:
        return [0]

number_to_bits(6)

輸出結果

Starting var:.. number = 6
21:14:32.099769 call 3 @pysnooper.snoop()
21:14:32.099769 line 5 if number:
21:14:32.099769 line 6 bits = []
New var:....... bits = []
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 10 return bits
21:14:32.099769 return 10 return bits

如果你不想追蹤整個函數(shù),那可以用 with 塊包裝你想追蹤的那部分,如下:

import pysnooper
import random

def foo():
    lst = []
    for i in range(10):
        lst.append(random.randrange(1, 1000))

    with pysnooper.snoop():
        lower = min(lst)
        upper = max(lst)
        mid = (lower + upper) / 2
        print(lower, mid, upper)

foo()

輸出結果

New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line 10 lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line 11 upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line 12 mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line 13 print(lower, mid, upper)
Elapsed time: 00:00:00.000344

如何安裝?

最佳方式:pip

$ pip install pysnooper

其他方式:

  • Conda:$ conda install -c conda-forge pysnooper
  • Arch Linux:$ yay -S python-pysnooper
  • Fedora Linux:dnf install python3-pysnooper

技術交流

歡迎轉載、收藏、有所收獲點贊支持一下!

在這里插入圖片描述

以上就是詳解Python調(diào)試神器之PySnooper的詳細內(nèi)容,更多關于Python PySnooper的資料請關注腳本之家其它相關文章!

相關文章

  • python通用讀取vcf文件的類(復制粘貼即可用)

    python通用讀取vcf文件的類(復制粘貼即可用)

    這篇文章主要介紹了python通用讀取vcf文件的類(可以直接復制粘貼使用) ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Windows系統(tǒng)下多版本pip的共存問題詳解

    Windows系統(tǒng)下多版本pip的共存問題詳解

    這篇文章主要給大家介紹了關于在Windows系統(tǒng)下多版本pip的共存問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-10-10
  • Python分割訓練集和測試集的方法示例

    Python分割訓練集和測試集的方法示例

    這篇文章主要介紹了Python分割訓練集和測試集的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Tkinter使用Progressbar創(chuàng)建和管理進度條的操作代碼

    Tkinter使用Progressbar創(chuàng)建和管理進度條的操作代碼

    Progressbar是Tkinter庫中的一個小部件,用于創(chuàng)建和管理進度條,這篇文章主要介紹了Tkinter使用Progressbar創(chuàng)建和管理進度條,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 在Python中操作字典之setdefault()方法的使用

    在Python中操作字典之setdefault()方法的使用

    這篇文章主要介紹了在Python中操作字典之setdefault()方法的使用,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • 基于YUV 數(shù)據(jù)格式詳解及python實現(xiàn)方式

    基于YUV 數(shù)據(jù)格式詳解及python實現(xiàn)方式

    今天小編就為大家分享一篇基于YUV 數(shù)據(jù)格式詳解及python實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python入門Anaconda和Pycharm的安裝和配置詳解

    Python入門Anaconda和Pycharm的安裝和配置詳解

    這篇文章主要介紹了Python入門Anaconda和Pycharm的安裝和配置詳解,文章通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 深入講解Java編程中類的生命周期

    深入講解Java編程中類的生命周期

    這篇文章主要介紹了深入講解Java編程中類的生命周期,在帶有垃圾回收功能的Java虛擬機上運行的程序中類的生命周期就顯得格外重要,需要的朋友可以參考下
    2016-02-02
  • 簡單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    簡單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    這篇文章主要介紹了Python下用于監(jiān)視文件系統(tǒng)的pyinotify包,pyinotify基于inotify事件驅動機制,需要的朋友可以參考下
    2015-11-11
  • Python新手學習raise用法

    Python新手學習raise用法

    在本篇文章里小編給大家分享的是一篇關于Python新手學習raise用法的相關知識點,需要的朋友們可以參考下。
    2020-06-06

最新評論

遵化市| 阿鲁科尔沁旗| 洪洞县| 沙湾县| 贺州市| 苍山县| 波密县| 石河子市| 额尔古纳市| 湖南省| 山西省| 乌兰浩特市| 萝北县| 家居| 青阳县| 通化市| 建德市| 友谊县| 莱西市| 江口县| 北流市| 高雄县| 轮台县| 乐亭县| 永宁县| 古蔺县| 台州市| 渭源县| 九龙城区| 工布江达县| 云浮市| 静安区| 武山县| 丰镇市| 天等县| 高雄县| 漳浦县| 安龙县| 鄂托克前旗| 桃源县| 西安市|