python編程中有哪些方便的調試方法

大家好,給大家分享一下一個有趣的事情,很多人還不知道這一點。下面詳細解釋一下。現在讓我們來看看!

對于每個程序開發者來說,調試幾乎是必備技能。常用Pycharm編輯器里的方法有Print大法、log大法,但缺少類似Matlab的變量區,給代碼調試帶來不便,特別是在有函數的情況下,變量無法實時查看火車采集器偽原創。


1、Python Console

在Pycharm編輯器里面有個Python Console,可以查看變量變化,但對于函數變量難調試。


2、PySnooper

安利一款非常好用的調試工具,它能在一些場景下,大幅度提高調試的效率, 那就是 PySnooper

2.1、快速安裝

執行下面這些命令進行安裝 PySnooper

pip install pysnooper

2.2、簡單案例

下面這段代碼,定義了一個?test?的函數,在里面生成一個?person 的字典變量,然后去更新它,最后返回。

import pysnooper@pysnooper.snoop()def test():    person = {}    person["name"] = "domi"    person["age"] = 28    person["gender"] = "male"    return persondef main():     author = test()main()

輸出結果

21:25:21.875841?call?????????5?def?test():21:25:21.875841 line         6     person = {}New var:....... person = {}21:25:21.875841 line         7     person["name"] = "domi"Modified var:.. person = {'name': 'domi'}21:25:21.876840 line         8     person["age"] = 28Modified var:.. person = {'name': 'domi', 'age': 28}21:25:21.876840 line         9     person["gender"] = "male"Modified var:.. person = {'name': 'domi', 'age': 28, 'gender': 'male'}21:25:21.876840 line        10     return person21:25:21.876840 return      10     return personReturn value:.. {'name': 'domi', 'age': 28, 'gender': 'male'}Elapsed time: 00:00:00.000999

PySnooper 把函數運行的過程全部記錄了下來,包括:

  • 代碼的片段、行號等信息,以及每一行代碼是何時調用的?

  • 函數內局部變量的值如何變化的?何時新增了變量,何時修改了變量。

  • 函數的返回值是什么?

  • 運行函數消耗了多少時間?

2.3、重定向到日志文件

@pysnooper.snoop() 不加任何參數時,會默認將調試的信息輸出到標準輸出。對于單次調試就能解決的 BUG ,這樣沒有什么問題,但是有一些 BUG 只有在特定的場景下才會出現,需要你把程序放在后面跑個一段時間才能復現。這種情況下,你可以將調試信息重定向輸出到某一日志文件中,方便追溯排查。

@pysnooper.snoop(output='./debug.log')def test():

2.4、跟蹤非局部變量值

PySnooper 是以函數為單位進行調試的,它默認只會跟蹤函數體內的局部變量,若想跟蹤全局變量,可以給 pysnooper.snoop() 加上 watch 參數

out = {"foo": "bar"}@pysnooper.snoop(watch=('out["foo"]'))def test():    person = {}    person["name"] = "domi"    person["age"] = 28    person["gender"] = "male"    out["foo"] += 'test'    return person

2.5、設置跟蹤函數的深度

當你使用 PySnooper 調試某個函數時,若該函數中還調用了其他函數,PySnooper 是不會傻傻的跟蹤進去的。如果你想繼續跟蹤該函數中調用的其他函數,可以通過指定 depth 參數來設置跟蹤深度(不指定的話默認為 1)。

@pysnooper.snoop()def test():    person = {}    person["name"] = "domi"    person["age"] = 28    person["gender"] = "male"    c = test1()    return persondef test1():    a = 1    b = 2    return a + b

@pysnooper.snoop(depth=2)

2.6、設置調試日志的前綴

當你在使用 PySnooper 跟蹤多個函數時,調試的日志會顯得雜亂無章,不方便查看。在這種情況下,PySnooper 提供了一個參數,方便你為不同的函數設置不同的標志,方便你在查看日志時進行區分。

@pysnooper.snoop(output="./debug.log", prefix="test: ")def test():    person = {}    person["name"] = "domi"    person["age"] = 28    person["gender"] = "male"    c = test1()    return person@pysnooper.snoop(output="./debug.log", prefix="test1: ")def test1():    a = 1    b = 2    return a + b

2.7、支持多線程調試模式

PySnooper 同樣支持多線程的調試,通過設置參數 thread_info=True,它就會在日志中打印出是在哪個線程對變量進行的修改。

@pysnooper.snoop(thread_info=True)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

敏感掛載binfmt_misc容器逃逸復現和分析

前言 對于/proc下有很多掛載會導致容器逃逸,其中binfmt_misc就是一種可以利用的逃逸掛載 binfmt_mics 實驗 touch test_fmt_intp echo aaa > test_fmt echo #!/bin/sh > test_fmt_intp echo >> test_fmt_intp chmod x test_fmt_intp echo :test_fmt…

怎么開通Tik Tok海外娛樂公會呢?

TikTok作為全球知名的社交媒體平臺,吸引了數億用戶的關注和參與。許多公司和個人渴望通過開通TikTok直播公會進入這一領域,以展示自己的創造力和吸引更多粉絲。然而,成為TikTok直播公會并非易事,需要滿足一定的門檻和申請找cmxyci…

【日常積累】Linux之init系統學習

init系統簡介: Linux 操作系統的啟動首先從 BIOS 開始,接下來進入 boot loader,由 bootloader 載入內核,進行內核初始化。內核初始化的最后一步就是啟動 pid 為 1 的 init 進程,這個進程是系統的第一個進程,它負責產生…

銀河麒麟服務器v10 sp1 .Net6.0 上傳文件錯誤

上一篇:銀河麒麟服務器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前,在Linux服務器上安裝 libgdiplus 即可解決,libgdiplus是System.Drawing.Common原生端跨平臺實現的主要提供者,是開源mono項目。地址…

封裝form表單

目錄 1. 源碼 2. 其他頁面引用 ps&#xff1a;請看完看明白再復用 1. 源碼 <template><div style"width: 100%; height: 100%" class"form-condition"><!-- 普通表單 --><el-card shadow"hover" class"cardheigh…

AQS的原理及應用

文章目錄 AQS引言AQS 的原理AQS 應用舉例1:Semaphore舉例2:ReentrantLockAQS 的案例分析問題背景解決方案AQS 引言 在我們的日常生活和工作中,往往需要協調各個線程之間的執行順序和資源使用,而AQS(AbstractQueuedSynchronizer)即為 Java 并發包中提供的一種解決辦法。…

ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia

ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia 初環境與設備環境準備克隆模型代碼部署 ChatGLM-6B完整代碼 ChatGLM-6B 是一個開源的、支持中英雙語的對話語言模型&#xff0c;基于 General Language Model (GLM) 架構&#xff0c;具有 62 億參數。結合模型量化技術&#x…

力扣 322. 零錢兌換

題目來源&#xff1a;https://leetcode.cn/problems/coin-change/description/ C題解&#xff08;來源代碼隨想錄&#xff09;&#xff1a;題目中說每種硬幣的數量是無限的&#xff0c;可以看出是典型的完全背包問題。動規五部曲分析如下&#xff1a; 確定dp數組以及下標的含義…

深入理解設計模式-創建型之建造者模式(與工廠區別)

什么是建造者設計模式&#xff1f;和工廠設計模式有什么區別 建造者設計模式&#xff08;Builder Design Pattern&#xff09;和工廠設計模式&#xff08;Factory Design Pattern&#xff09;都是面向對象設計中的創建型模式&#xff0c;但它們解決的問題和應用場景有所不同。…

原碼、反碼、補碼,進制轉換,有符號數和無符號數轉換

計算機底層存儲數據時&#xff0c;存儲的是數據對應的二進制數字。對于整型數據&#xff0c;其二進制表示形式有三種&#xff0c;分別是&#xff1a;原碼、反碼、補碼&#xff0c;而實際存儲的是整型數據的補碼。 原碼、反碼以及補碼都是有符號的&#xff0c;其中最高位存放符…

帶你掌握Stable Diffution商業級玩法

課程介紹 學習地址 《Stable Diffusion商業級玩法》通過詳細講解AI繪畫技巧、實操演示和個性化指導&#xff0c;幫助您從零基礎成為繪畫高手&#xff0c;幫助您有效推廣產品或服務&#xff0c;提升市場份額。教您掌握穩定擴散繪畫技巧&#xff0c;開啟藝術創作新篇章。

Opencv 之ORB特征提取與匹配API簡介及使用例程

Opencv 之ORB特征提取與匹配API簡介及使用例程 ORB因其速度較快常被用于視覺SLAM中的位姿估計、視覺里程、圖像處理中的特征提取與匹配及圖像拼接等領域本文將詳細給出使用例程及實現效果展示 1. API 簡介 創建 static Ptr<ORB> cv::ORB::create (int nfeatures 500…

無涯教程-Perl - use函數

描述 此函數將MODULE導出的所有功能(或僅LIST引用的功能)導入當前包的名稱空間。有效等效于- BEGIN { require "Module.pm"; Module->import(); }也用于在當前腳本上強加編譯器指令(編譯指示),盡管從本質上講它們只是模塊。 請注意,use語句在編譯時進行判斷。在…

springcloud3 hystrix實現服務熔斷的案例配置3

一 hystrix的熔斷原理 1.1 hystrix的熔斷原理 在springcloud的框架里&#xff0c;熔斷機制是通過hystrix實現&#xff0c;hystrix會監控服務之間的調用。當失敗調用達到一定的閾值&#xff0c;默認是5s內失敗20次&#xff0c;就會啟用hystrix的熔斷機制&#xff0c;使用命Hy…

神經網絡基礎-神經網絡補充概念-44-minibatch梯度下降法

概念 小批量梯度下降法&#xff08;Mini-Batch Gradient Descent&#xff09;是梯度下降法的一種變體&#xff0c;它結合了批量梯度下降&#xff08;Batch Gradient Descent&#xff09;和隨機梯度下降&#xff08;Stochastic Gradient Descent&#xff09;的優點。在小批量梯…

Apache Doris大規模數據使用指南

目錄 發展歷史 架構介紹 彈性MPP架構-極簡架構 邏輯架構 基本訪問架構 分區 創建單分區表

【C++ 記憶站】缺省參數

文章目錄 缺省參數的概念缺省參數的分類1、全缺省參數2、半缺省參數 缺省參數實際應用場景 缺省參數的概念 缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時&#xff0c;如果沒有指定實參則采用該形參的缺省值&#xff0c;否則使用指定的實參 正常調用一…

音頻解碼及如何在Java實現

本人并不干這個&#xff0c;但是被迫下水了解了一下這個&#xff0c;稍微做了一下整理。再就是感覺現在網上以及ChatGPT在這方面給出的答案太水了&#xff0c;在此開辟一篇。無意放出代碼&#xff0c;這里只介紹一些可能重要的點。 本來以為有了ChatGPT寫這些就沒有必要了&…

Docker部署ES服務,canal全量同步的時候內存爆炸,ES/Canal Adapter自動關閉,CPU100%

文章目錄 問題解決方案1. 對ES的限制2. 對Canal-Adapter的限制 問題 使用canal-adapter全量同步&#xff08;參考Canal Adapter1.1.5版本API操作服務&#xff0c;手動同步數據&#xff08;4&#xff09;&#xff09;的時候 小批量數據可以正常運行&#xff08;幾千條&#xf…

Llama 2免費托管及API提供

Llama 2 是 Meta 最新的文本生成模型&#xff0c;目前其性能優于所有開源替代方案。 推薦&#xff1a;用 NSDT編輯器 快速搭建可編程3D場景 1、強大的Llama 2 它擊敗了 Falcon-40B&#xff08;之前最好的開源基礎模型&#xff09;&#xff0c;與 GPT-3.5 相當&#xff0c;僅低…