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

Python代碼調試Debug的實用技巧分享

 更新時間:2024年11月28日 10:08:52   作者:星辰聊技術  
我們日常寫代碼過程中,難免會寫出各類錯誤,這些錯誤可能是語法錯誤、邏輯錯誤或運行時錯誤,所以本文為大家分享了一些Python調試Debug的技巧,感興趣的可以了解下

我們日常寫代碼過程中,難免會寫出各類錯誤,這些錯誤可能是語法錯誤、邏輯錯誤或運行時錯誤。我們可以使用最復雜的答案是來檢測到錯誤。也可以通過仔細閱讀回溯、使用調試工具、使用 linters 進行靜態(tài)分析以及運行測試來檢測錯誤,確保在運行之前和運行期間識別問題。

1.使用print語句進行調試

使用print語句進行調試就像在你要去的路上放置路標,我個人在我的隱喻中相信這一點

就像路標引導你并告訴你身在何處一樣,代碼中的打印語句會顯示變量的當前值以及程序執(zhí)行到的位置。

通過檢查這些“路標”,你可以確定自己是否走在正確的道路上或是否出了問題。

print(f"Hello, World!\n");

在代碼的關鍵點插入print()語句以輸出變量值并跟蹤執(zhí)行流程。這可以幫助你了解不同階段發(fā)生的情況。

例如:

我們在行中使用了print語句作為路徑(代碼流)上的路標,告訴你你在哪里以及發(fā)生了什么。如果出現(xiàn)問題,你可以使用這些檢查點來找出路徑(代碼)將你引入歧途的地方。

def hiking_trip(start, destination):
    print(f"從{start}開始徒步。")  # 路標 1
    midpoint = (start + destination) / 2
    print(f"到達中點:{midpoint}.")  # 路標 2
    if midpoint > 50:
        print("The midpoint is quite far!")  # 路標 3
    print(f"繼續(xù)前往目的地:{destination}.")  # 路標 4
    return destination

hiking_trip(0, 100)

2.利用Python的內置pdb模塊

使用 Python 的pdb模塊就像暫停電影并逐幀播放。

就像你可以暫停、倒帶或快進電影來查看正在發(fā)生的事情一樣,pdb 可讓你隨時暫停代碼,檢查正在發(fā)生的事情,并一步一步地瀏覽代碼。這樣,你可以仔細檢查代碼的每個部分,以找出可能出錯的地方。

使用該pdb模塊設置斷點并以交互方式逐步執(zhí)行代碼。首先插入import pdb; pdb.set_trace()要暫停執(zhí)行的位置。

命令

python -m pdb your_script.py

例如:

例如,通過添加pdb.set_trace()到你的程序中,執(zhí)行將在該行停止,從而允許你與提示符進行交互pdb。一旦到達提示符。

import pdb 
def example_function(x, y ): 
    result = x + y 
    pdb.set_trace()   # 執(zhí)行將在此處暫停
    print(f"結果是{result}") 
    return result 

example_function(3, 5)

你可以使用各種命令來調試,例如:

n:轉到下一行代碼。s:進入函數(shù)調用。c:繼續(xù)執(zhí)行,直到下一個斷點。

3.利用IDE調試器

使用 IDE 調試器就像在觀看電影時擁有一個具有高級功能的遙控器。

你可以暫停、跳過場景并查看幕后細節(jié),IDE 調試器可以讓你設置斷點、檢查變量并以可視化的方式控制代碼流程。

利用 PyCharm 或 VSCode 等 IDE 中的內置調試器。這些工具提供了用于設置斷點、檢查變量和逐步執(zhí)行代碼的圖形界面。

例如:

在 PyCharm 或 VSCode 等 IDE 中調試程序時,你可以在代碼中所需的關鍵點設置斷點,類似于在重要場景暫停電影。隨時徹底檢查變量,就像看到電影幕后的細節(jié)一樣。一次執(zhí)行一行代碼,就像使用遙控器在電影中逐幀跳過一樣。

def movie_scene(start, end): 
    scene_duration = end - start   # 這是代碼的“電影長度”
    important_event = start + scene_duration // 2   #“電影”的中點
    return f"重要事件發(fā)生在{important_event}秒。"

 movie_scene( 0 , 120 )

當調試器暫停執(zhí)行時,你將能夠執(zhí)行以下命令:

檢查start和end的值??纯磗cene_duration評估結果是什么。跨到下一行進行計算important_event。

4.利用日志記錄獲取更好的洞察力

使用日志記錄而不是打印語句就像保存詳細的日記而不是便簽。

如果你需要快速記賬,可以使用打印語句,它可以像便簽一樣工作,便簽可以為你提供快速提醒,而日記(記錄)可以讓你記錄不同級別的細節(jié),從隨意的觀察到關鍵問題。

日志記錄稍微復雜一些。你可以根據(jù)日志的重要性查看它們,并調整要查看的詳細信息,從而幫助你更系統(tǒng)地跟蹤代碼中發(fā)生的情況。

import logging
logging.basicConfig(level=logging.DEBUG) 
logging.debug('這是一條調試消息')

用 Python 的模塊替換print()語句logging。日志可以記錄不同級別的消息(DEBUG、INFO、WARNING、ERROR、CRITICAL),并控制顯示的詳細信息量。例如:

DEBUG:詳細信息,用于診斷問題。

INFO:確認一切如預期進行。

WARNING:表示發(fā)生了意外的事情,但是程序仍然在運行。

ERROR:更嚴重的問題,程序可能無法繼續(xù)運行。

CRITICAL:一個嚴重的問題,意味著該程序可能無法繼續(xù)運行。

import logging

# 配置日志記錄以顯示所有級別
logstash.basicConfig(level=logging.DEBUG) 

def hill_log ( start, destination ): 
    logstash.info(f"從{start}開始徒步到{destination}。")   # 正常流程的 INFO 級別
    midpoint = (start + destination) / 2
    logstash.debug(f"中點在{midpoint}。")   # 詳細信息的 DEBUG 級別
    if midpoint > 50 : 
       logstash.warning("中點比預期的遠!")   # 潛在問題的 WARNING 級別
    if destination - start > 100 : 
        logstash.error("這次徒步太長了!")   # 重大問題的錯誤級別
    if destination - start > 200 : 
        logstash.critical("不可能徒步!目的地太遠!")   # 嚴重問題的 CRITICAL 級別
    return destination 

hill_log(0, 250)

在此示例中,你可以看到每個日志級別如何更加井然有序,并幫助你根據(jù)重要性顯示信息,就像日記一樣,它能讓你理清自己的旅程。此外,它還能讓你隨時篩選或查看日志,print這比在代碼中到處寫語句(便簽)要強大得多。我強烈推薦初學者使用這個!

5.仔細檢查回溯

仔細檢查回溯就像跟著地圖去尋找你在徒步旅行中迷路的地方一樣。

地圖(回溯)顯示你所走的確切路徑,并突出顯示出錯的地方。通過在地圖上仔細追溯你的步驟,你可以準確地找出錯誤發(fā)生的位置并了解導致錯誤的原因,從而幫助你回到正軌。

仔細閱讀錯誤消息的完整回溯。它們提供了有關錯誤發(fā)生位置和原因的詳細信息,可幫助你查明問題所在。

Traceback(most recent call last):
  File "example.py", line 8, in <module>
    main()
  File "example.py", line 5, in main
    result = divide_numbers(x, y)
  File "example.py", line 2, in divide_numbers
    return a / b
ZeroDivisionError: division by zero

ZeroDivisionError: division by zero–– –– 實際的錯誤信息。

6.使用try和except進行錯誤處理

使用try和except進行錯誤處理就像攀爬時佩戴安全帶。

安全帶(try 塊)允許你繼續(xù)攀爬(代碼執(zhí)行),但如果你滑倒(發(fā)生錯誤),安全帶會抓住你(except 塊),防止跌落(程序崩潰)。這樣,你就可以安全地瀏覽代碼中的危險部分,而不會突然停止一切。

將可能引發(fā)錯誤的代碼包裝在try塊中,并使用except塊處理異常。這可以幫助你管理和理解錯誤,而不會導致程序崩潰。

例子

try:    
 risky_code() 
except Exception as e:    
print(f"An error occurred: {e}")

7. 用類型檢查

就像在開始烹飪之前要檢查配料是否正確且數(shù)量正確一樣,類型檢查可在運行代碼之前確保變量和函數(shù)具有正確的類型。這可以幫助你盡早發(fā)現(xiàn)潛在的混淆(類型相關錯誤),防止問題在以后破壞你的程序。

使用類型提示和工具mypy執(zhí)行靜態(tài)類型檢查并在運行之前捕獲類型相關的錯誤。

命令

mypy your_script.py

8.使用斷言進行測試

你使用斷言檢查代碼中的條件在特定點是否正確。如果某些東西看起來不自然,斷言會立即捕捉到它,幫助你發(fā)現(xiàn)并修復邏輯錯誤,以免它們造成更大的問題。

使用assert語句來驗證代碼中各個點的條件是否成立。斷言可以幫助盡早發(fā)現(xiàn)邏輯錯誤。

例子

assert x > 0, "x must be positive"

9.使用 Linters 分析代碼

使用 linters 分析代碼就像對你的寫作進行語法檢查一樣。

就像語法檢查器會突出顯示文本中的錯誤、不恰當?shù)拇朕o和風格問題一樣,

linter 會掃描你的代碼,查找語法錯誤、 編碼風格違規(guī)和潛在錯誤。這有助于你清理代碼,使其更易讀、更一致且無錯誤。

使用 pylint 或 flake8 等 linters來捕捉語法錯誤、文體問題和潛在錯誤。

命令:pylint your_script.py

10. 使用代碼分析器進行監(jiān)控

使用代碼分析器就像使用健身追蹤器來監(jiān)控你的鍛煉一樣。

為什么我要對健身追蹤器說這些,因為就像健身追蹤器可以測量你的表現(xiàn),識別需要改進的地方,并在需要時為你提供指導一樣,代碼分析器也可以跟蹤同樣的工作。你的程序如何運行并突出顯示其運行速度變慢或遇到問題的地方。這有助于你優(yōu)化代碼并提高其效率。

使用分析工具cProfile來測量代碼的性能并識別可能導致意外行為的瓶頸或區(qū)域。

命令:python -m cProfile your_script.py

到此這篇關于Python代碼調試Debug的實用技巧分享的文章就介紹到這了,更多相關Python代碼調試Debug內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python打印exception信息的方法

    python打印exception信息的方法

    這篇文章主要介紹了python打印exception信息的相關知識,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 利用Python實現(xiàn)生成顏色表(color chart)

    利用Python實現(xiàn)生成顏色表(color chart)

    在做色彩相關的算法分析時候,經常需要使用規(guī)則的顏色表來進行輔助,本文就來利用numpy和opencv生成顏色表并保存為圖片,需要的可以參考一下
    2023-05-05
  • python+POP3實現(xiàn)批量下載郵件附件

    python+POP3實現(xiàn)批量下載郵件附件

    這篇文章主要為大家詳細介紹了python+POP3實現(xiàn)批量下載郵件附件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python庫如何打包到PyPI

    Python庫如何打包到PyPI

    這篇文章主要介紹了Python庫如何打包到PyPI問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python 如何利用argparse解析命令行參數(shù)

    python 如何利用argparse解析命令行參數(shù)

    這篇文章主要介紹了python 利用argparse解析命令行參數(shù)的步驟,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • Python3中bytes類型轉換為str類型

    Python3中bytes類型轉換為str類型

    Python 3最重要的新特性之一是對字符串和二進制數(shù)據(jù)流做了明確的區(qū)分。這篇文章主要介紹了Python3中bytes類型轉換為str類型的相關知識,需要的朋友可以參考下
    2018-09-09
  • Python使用lxml庫和Xpath提取網頁數(shù)據(jù)的完整指南與最佳實戰(zhàn)

    Python使用lxml庫和Xpath提取網頁數(shù)據(jù)的完整指南與最佳實戰(zhàn)

    本文介紹使用Python的lxml庫和Xpath提取網頁數(shù)據(jù),涵蓋lxml庫基礎用法、代碼實戰(zhàn),還提及處理動態(tài)加載和命名空間等進階用法,同時闡述了爬蟲的錯誤處理、數(shù)據(jù)存儲、部署、監(jiān)控等內容,以及后續(xù)的數(shù)據(jù)處理、分析、可視化和報告撰寫等步驟,需要的朋友可以參考下
    2025-11-11
  • tensorflow 1.X遷移至tensorflow2 的代碼寫法

    tensorflow 1.X遷移至tensorflow2 的代碼寫法

    本文主要介紹了tensorflow 1.X遷移至tensorflow2 的代碼寫法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python遠程linux執(zhí)行命令實現(xiàn)

    Python遠程linux執(zhí)行命令實現(xiàn)

    這篇文章主要介紹了Python遠程linux執(zhí)行命令實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Python的joblib模型固化函數(shù)解析

    Python的joblib模型固化函數(shù)解析

    這篇文章主要介紹了Python的joblib模型固化函數(shù)解析,joblib提供了三個與對象序列化和模型固化相關的函數(shù)hash,dump,load,joblib.hash主要是為了提供一個numpy對象的hash方法,需要的朋友可以參考下
    2023-08-08

最新評論