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

分享2個方便調(diào)試Python代碼的實用工具

 更新時間:2022年05月24日 17:04:51   作者:sgzqc  
這篇文章主要介紹了分享方便調(diào)試Python代碼的2個實用工具,可以方便展示我們調(diào)試代碼的中間狀態(tài),提升大家的編碼效率,詳細(xì)的介紹需要的小伙伴可以參考一下下面文章內(nèi)容

1. 引言

今天來給小伙伴推薦兩款實用的便于調(diào)試Python代碼的工具,可以方便展示我們調(diào)試代碼的中間狀態(tài),提升大家的編碼效率。

2. 動機(jī)

在日常工作中,經(jīng)常寫Python的小伙伴經(jīng)常會遇到需要調(diào)試代碼bug的情形,有時候我們Python的錯誤提示信息特別丑,

舉例如下:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line 17, in <module>
divide_numbers(num_list)
File "loguru_example.py", line 11, in divide_numbers
res = division(num1, num2)
File "loguru_example.py", line 5, in division
return num1/num2
ZeroDivisionError: division by zero

如果你覺得尚可接受,那我們不妨來看下如下顯示錯誤的方式:

哇偶,沒有對比就沒有傷害,看了上述的顯示,有木有心動。
好滴,我們可以通過一些Python的第三方包,來實現(xiàn)上述調(diào)試效果。我們來看如下兩款第三方Python包:

  • Loguru: 更好的打印程序異常
  • snoop: 打印函數(shù)中正在執(zhí)行的代碼行

好了,接下來我們就來一個個的介紹這些好用的工具吧。

3. Loguru

Loguru是一個旨在使Python中的日志顯示變得有趣的庫。Loguru提供了許多有趣的功能,但我發(fā)現(xiàn)該庫最有用的一個功能是捕獲程序異常并顯示導(dǎo)致代碼失敗的變量值。

3.1 安裝

我們可以使用pip來直接進(jìn)行安裝,代碼如下:

pip install loguru

3.2 舉個栗子

為了理解Loguru是如何工作的,假設(shè)我們現(xiàn)在有兩個函數(shù)divisiondivide_numbers,

如下所示:

from itertools import combinations
def division(num1: int, num2: int):
return num1/num2
def divide_numbers(num_list: list):
"""Division of 2 numbers in the number list """
for comb in combinations(num_list, 2):
num1, num2 = comb
res = division(num1, num2)
print(f"{num1} divided by {num2} is equal to {res}.")
if __name__ =='__main__':
num_list = [2, 1, 0]
divide_numbers(num_list)

注意??combinations([2,1,0], 2)??返回值為??[(2, 1), (2, 0), (1, 0)]??。

運(yùn)行上述代碼后,我們會出現(xiàn)以下錯誤:

2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line 17, in <module>
divide_numbers(num_list)
File "loguru_example.py", line 11, in divide_numbers
res = division(num1, num2)
File "loguru_example.py", line 5, in division
return num1/num2
ZeroDivisionError: division by zero

3.3 使用Loguru

通過上述輸出,我們知道代碼行 ??return num1/num2 ??是錯誤發(fā)生的地方,但是我們并不清楚??num1??和??num2??的那些值導(dǎo)致的錯誤。幸運(yùn)的是,我們可以通過添加Loguru的裝飾器來捕捉此時的異常,

代碼如下:

from loguru import logger
from itertools import combinations
def division(num1: int, num2: int):
return num1/num2
@logger.catch # Add this to track errors
def divide_numbers(num_list: list):
for comb in combinations(num_list, 2):
num1, num2 = comb
res = division(num1, num2)
print(f"{num1} divided by {num2} is equal to {res}.")
if __name__ =='__main__':
num_list = [2, 1, 0]
divide_numbers(num_list)

運(yùn)行結(jié)果如下:

通過在代碼中添加logger.catch,此時的異常情況更加容易被理解!我們通過觀察此時的輸出,可以明確的知道當(dāng)2除以0時導(dǎo)致函數(shù)出現(xiàn)異常錯誤信息。

4. Snoop

如果我們編寫完的代碼經(jīng)過調(diào)試后沒有了錯誤,但我們想弄清楚代碼運(yùn)行時發(fā)生了什么?這就是snoop派上用場的情形。

4.1 安裝

snoop是一個第三方的Python包,通過只添加一個裝飾器可以方便地打印正在執(zhí)行的代碼行以及每個變量的值。
同樣我們依然可以通過pip來安裝snoop庫,代碼如下:

pip install snoop

4.2 舉例

假設(shè)我們有一個名為factorial的函數(shù),它主要用于實現(xiàn)計算整數(shù)的階乘。

代碼如下:

import snoop
def factorial(x: int):
if x == 1:
return 1
else:
return (x * factorial(x-1))
if __name__ == "__main__":
num = 5
print(f"The factorial of {num} is {factorial(num)}")

輸出如下:

The factorial of 5 is 120

 

4.3 使用factorial

為了理解為什么函數(shù)factorial的輸出值為20,我們可以通過添加snoop的裝飾器來查看函數(shù)的調(diào)用情形,

代碼如下:

import snoop
@snoop
def factorial(x):
if x == 1:
return 1
else:
return (x * factorial(x-1))
if __name__ == "__main__":
num = 5
print(f"The factorial of {num} is {factorial(num)}")

輸出如下:

在上述輸出中,我們可以查看變量的值以及實際代碼運(yùn)行情形。進(jìn)而通過上述輸出,我們可以更好地理解遞歸的工作原理!

5. 總結(jié)

文章重點介紹了兩種跟蹤和可視化Python代碼執(zhí)行的工具。我希望通過使用這兩款調(diào)試工具,來大大提升大家的工作效率和定位問題的能力。

到此這篇關(guān)于分享方便調(diào)試Python代碼的2個實用工具的文章就介紹到這了,更多相關(guān) Python調(diào)試代碼工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python random庫使用方法及異常處理方案

    Python random庫使用方法及異常處理方案

    這篇文章主要介紹了python random庫使用方法及異常處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 淺談Python任務(wù)自動化工具Tox基本用法

    淺談Python任務(wù)自動化工具Tox基本用法

    這篇文章主要介紹了淺談Python任務(wù)自動化工具Tox,tox 是一個管理測試虛擬環(huán)境的命令行工具, 它已存在多年且廣被開發(fā)者們使用,對Python任務(wù)自動化工具Tox基本用法感興趣的朋友一起看看吧
    2022-06-06
  • python 異常捕獲詳解流程

    python 異常捕獲詳解流程

    異常即非正常狀態(tài),在Python中使用異常對象來表示異常。若程序在編譯或運(yùn)行過程中發(fā)生錯誤,程序的執(zhí)行過程就會發(fā)生改變,拋出異常對象,程序流進(jìn)入異常處理。如果異常對象沒有被處理或捕捉,程序就會執(zhí)行回溯(Traceback)來終止程序
    2022-03-03
  • tensorflow: variable的值與variable.read_value()的值區(qū)別詳解

    tensorflow: variable的值與variable.read_value()的值區(qū)別詳解

    今天小編就為大家分享一篇tensorflow: variable的值與variable.read_value()的值區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python隨機(jī)數(shù)模塊詳情

    Python隨機(jī)數(shù)模塊詳情

    這篇文章主要介紹了Python隨機(jī)數(shù)模塊,隨機(jī)數(shù)模塊實現(xiàn)了各種分布的偽隨機(jī)數(shù)生成器。對于整數(shù),從范圍中有統(tǒng)一的選擇。 對于序列,存在隨機(jī)元素的統(tǒng)一選擇、用于生成列表的隨機(jī)排列的函數(shù)、以及用于隨機(jī)抽樣而無需替換的函數(shù),下文來看看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Python使用socket模塊實現(xiàn)簡單tcp通信

    Python使用socket模塊實現(xiàn)簡單tcp通信

    這篇文章主要介紹了Python使用socket模塊實現(xiàn)簡單tcp通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python中關(guān)于提升工作效率的一些小技巧

    python中關(guān)于提升工作效率的一些小技巧

    這篇文章主要介紹了python中關(guān)于提升工作效率的一些小技巧,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • pandas時間序列之如何將int轉(zhuǎn)換成datetime格式

    pandas時間序列之如何將int轉(zhuǎn)換成datetime格式

    這篇文章主要介紹了pandas時間序列之如何將int轉(zhuǎn)換成datetime格式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python使用XlsxWriter庫操作Excel詳解

    Python使用XlsxWriter庫操作Excel詳解

    XlsxWriter 是一個功能強(qiáng)大的 Python 模塊,專門用于生成 Microsoft Excel 2007及以上版本的電子表格文件,本文主要為大家介紹了如何使用XlsxWriter庫進(jìn)行Excel基本操作,需要的可以參考下
    2023-11-11
  • Python實現(xiàn)密碼薄文件讀寫操作

    Python實現(xiàn)密碼薄文件讀寫操作

    這篇文章主要介紹了Python實現(xiàn)密碼薄文件讀寫操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論

明星| 和静县| 仁化县| 南郑县| 阿巴嘎旗| 新化县| 漠河县| 建始县| 潼关县| 临漳县| 永济市| 江城| 玉田县| 顺昌县| 嘉荫县| 永和县| 青冈县| 长泰县| 鸡东县| 明光市| 遂昌县| 灵寿县| 高碑店市| 南宫市| 永善县| 开远市| 防城港市| 蒙山县| 二连浩特市| 迭部县| 微山县| 元朗区| 成武县| 卓尼县| 贵定县| 天长市| 万州区| 延吉市| 尖扎县| 长丰县| 临颍县|