亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于PySnooper 永遠不要使用print進行調(diào)試的問題

 更新時間:2021年03月04日 10:42:17   作者:Python實用寶典  
這篇文章主要介紹了關(guān)于PySnooper 永遠不要使用print進行調(diào)試的問題,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

PySnooper 是一個非常方便的調(diào)試器。如果您正在試圖弄清楚為什么您的Python代碼沒有按照您的預(yù)期去做,您會希望使用具有斷點和監(jiān)視功能的成熟Debug工具,但是許多Debug工具配置起來非常麻煩。

現(xiàn)在,有了PySnooper,您并不需要配置那么復(fù)雜的Debug工具,就能夠完成對整個代碼的分析。它能告訴您哪些代碼正在運行,以及局部變量的值是什么。

其實,PySnooper 就是替代了一行一行print的重復(fù)性工作,給你的代碼一個pysnooper裝飾器,它能自動識別到語句和變量并將其值print出來:

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)

效果如下:

Source path:... 1.py
Starting var:.. number = 6
23:03:35.990701 call     4 def number_to_bits(number):
23:03:35.991699 line 5   if number:
23:03:35.991699 line 6     bits = []
New var:....... bits = []
23:03:35.991699 line 7     while number:
23:03:35.991699 line 8       number, remainder = divmod(number, 2)
Modified var:.. number = 3
New var:....... remainder = 0
23:03:35.991699 line 9       bits.insert(0, remainder)
Modified var:.. bits = [0]
23:03:36.004664 line 7     while number:
23:03:36.005661 line 8       number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
23:03:36.005661 line 9       bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
23:03:36.007657 line 7     while number:
23:03:36.007657 line 8       number, remainder = divmod(number, 2)
Modified var:.. number = 0
23:03:36.008655 line 9       bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
23:03:36.008655 line 7     while number:
23:03:36.009651 line 10     return bits
23:03:36.009651 return   10     return bits
Return value:.. [1, 1, 0]
Elapsed time: 00:00:00.020945

可以看到,它將每一行變量的值都輸出到屏幕上,方便你調(diào)試代碼。

僅僅需要寫一行代碼—使用裝飾器就可以實現(xiàn)這個方便的調(diào)試功能,比起一行行寫print,這可方便多了。

0.安裝模塊

使用這個模塊,你只需要使用Pip安裝PySnooper:

pip install pysnooper

接下來講講這個模塊其他好用的功能:

1.支持日志文件

如果你覺得print到屏幕上不方便,還可以將其輸出到log文件中,你只需要將裝飾器那一行改為:

@pysnooper.snoop('/my/log/file.log')

2.讀取局外變量或其他表達式

如果你想讀取在裝飾器作用范圍以外的變量或者表達式的值,還可以使用watch參數(shù):

@pysnooper.snoop(watch=('foo.bar', 'self.x["whatever"]'))

3.如果你不想用裝飾器,也可以用上下文的形式調(diào)試

沒錯,裝飾器有限定的使用條件,使用起來比較局限,因此pysnooper還支持使用 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()

效果如下,只有上下文里的代碼才會被調(diào)試出來:

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

當我們只需要調(diào)試部分代碼的時候,這個上下文形式的調(diào)試方法非常方便。

此外,PySnooper還有許多更強大的用法,大家可以看他們的高級使用文檔:

https://github.com/cool-RR/PySnooper/blob/master/ADVANCED_USAGE.md

到此這篇關(guān)于PySnooper 永遠不要使用print進行調(diào)試的文章就介紹到這了,更多相關(guān)PySnooper print調(diào)試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在pycharm中為項目導(dǎo)入anacodna環(huán)境的操作方法

    在pycharm中為項目導(dǎo)入anacodna環(huán)境的操作方法

    這篇文章主要介紹了在pycharm中為項目導(dǎo)入anacodna環(huán)境的操作方法,本文圖文并茂通過實例詳解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 使用beaker讓Facebook的Bottle框架支持session功能

    使用beaker讓Facebook的Bottle框架支持session功能

    這篇文章主要介紹了使用beaker讓Facebook的Bottle框架支持session功能,session在Python的Django等框架中內(nèi)置但在Bottle中并沒有被集成,需要的朋友可以參考下
    2015-04-04
  • Python使用pyodbc訪問數(shù)據(jù)庫操作方法詳解

    Python使用pyodbc訪問數(shù)據(jù)庫操作方法詳解

    這篇文章主要介紹了Python使用pyodbc訪問數(shù)據(jù)庫操作方法,結(jié)合實例形式詳細分析了Python基于pyodbc針對數(shù)據(jù)庫的連接、查詢、插入、修改、刪除等操作技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • pyqt5 實現(xiàn)多窗口跳轉(zhuǎn)的方法

    pyqt5 實現(xiàn)多窗口跳轉(zhuǎn)的方法

    今天小編就為大家分享一篇pyqt5 實現(xiàn)多窗口跳轉(zhuǎn)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python之lambda匿名函數(shù)及map和filter的用法

    Python之lambda匿名函數(shù)及map和filter的用法

    今天小編就為大家分享一篇關(guān)于Python之lambda匿名函數(shù)及map和filter的用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 如何使用Cython對python代碼進行加密

    如何使用Cython對python代碼進行加密

    這篇文章主要介紹了如何使用Cython對python代碼進行加密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-07-07
  • python實現(xiàn)二維數(shù)組的對角線遍歷

    python實現(xiàn)二維數(shù)組的對角線遍歷

    這篇文章主要為大家詳細介紹了python實現(xiàn)二維數(shù)組的對角線遍歷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 教你如何把Python CSV 合并到多個sheet工作表

    教你如何把Python CSV 合并到多個sheet工作表

    今天我們要實現(xiàn)將多個CSV文件,合并到一個Excel文件中的,多個sheet工作表,網(wǎng)上大多方法都是將csv直接合并在一起,也不分別創(chuàng)建sheet表。接下來通過本文給大家詳細介紹下,需要的朋友參考下吧
    2021-11-11
  • 解決Python 命令行執(zhí)行腳本時,提示導(dǎo)入的包找不到的問題

    解決Python 命令行執(zhí)行腳本時,提示導(dǎo)入的包找不到的問題

    今天小編就為大家分享一篇解決Python 命令行執(zhí)行腳本時,提示導(dǎo)入的包找不到的問題,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧
    2019-01-01
  • Python中def()函數(shù)的實戰(zhàn)練習題

    Python中def()函數(shù)的實戰(zhàn)練習題

    def是define的縮寫,用來自定義函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中def()函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07

最新評論