自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何調試您的Python代碼?

譯文
開發(fā) 后端
本文將以Python為例,和您討論八種有關代碼調試的優(yōu)秀實踐。它們既可以被單獨使用,也能夠通過組合來增強效果。

[[406423]]

【51CTO.com快譯】對于碼農而言,如果說能夠編寫出有效的代碼,會給他們帶來滿滿的成就感的話;那么當其代碼中出現(xiàn)缺陷、甚至是錯誤時,他們則會產生深深的挫敗感。因此,為了避免在軟件運行的過程中,出現(xiàn)各種意想不到的錯誤,我們需要通過針對程序的調試,來消除各種代碼級別的錯誤。本文將以Python為例,和您討論八種有關代碼調試的優(yōu)秀實踐。

何為Python異常?

每當Python無法解釋某段目標代碼或命令時,程序往往會拋出異常。Python的各種異常,實際上是Python在執(zhí)行代碼時,出現(xiàn)的一組錯誤集合。

通常,Python會使用try和except塊,來觸發(fā)各種錯誤異常。由于可執(zhí)行的命令往往位于try塊之內,因此當try中的代碼出現(xiàn)失敗時,Python就會去執(zhí)行except塊中的代碼。也就是說,except關鍵字中的語句本質上就是try塊中的那些異常,Python只是將它們作為錯誤而觸發(fā)罷了。當然,一個try...except塊有時候也可能會包含多個帶有except關鍵字的異常。其中包含了許多我們在Python中常見的典型錯誤與詳細信息。

由于我們在使用各種內置函數(shù)、軟件庫或Python框架時,都可能會碰到異常,因此,即便您認真編寫和遵守了正確的語法,也無法保證相關方法在調用和執(zhí)行時不會出錯。例如,您可能只編寫了大約5行代碼,但是Python程序會發(fā)現(xiàn)到您正在使用的某個庫、框架或內置方法的源代碼中,存在著預定義的相關異常,因此會在第200行處觸發(fā)異常錯誤。

語法錯誤

當程序代碼無法在語法層面上被識別時,Python通常會拋出語法級別的錯誤。如果您是Python的初學者,那么就可能會頻繁地遇到此類語法錯誤。不過,由于這些錯誤比那些深層次的異常(in-depth exceptions)更易于被追溯,因此您一旦掌握了基本原理,就很容易對它們進行合理的處理。

如何調試你的Python代碼

Python的典型異常包括:縮進、類型、以及名稱錯誤等方面。它們既可能來自單行代碼,也可能源于某個代碼塊。我們雖然沒有統(tǒng)一的方法對其進行處置,但是可以根據各種實例和項目類型,去予以應對。下面,讓我們來具體討論可用于調試Python的八種方法。它們既可以被單獨使用,也能夠通過組合來增強效果。

1.檢查錯誤描述

處理Python錯誤的可用方法之一是查看錯誤的描述。Python通常會在其錯誤輸出的最后一行給予詳細的說明。例如:在解析意外的EOF(End Of File)時,我們會發(fā)現(xiàn)它們通常與缺少括號有關。也就是說,當您嘗試著從類或對象處調用某個錯誤的函數(shù)時,就會出現(xiàn)AttributeError之類無效的語法(invalid syntax)錯誤。因此,通過最終一行的“蛛絲馬跡”,您往往能夠成功地追蹤錯誤的來源,并著手重寫其相關的代碼。

2.追蹤錯誤的來源

Python的錯誤具有較強的代碼行限定性(line-bound),在遇到錯誤時,您需要注意Python所指向的具體行號。例如,由于下面的代碼會嘗試著連接不同的數(shù)據類型(字符串和整數(shù)),因此會產生類型方面的錯誤(type error)。其錯誤信息指向了示例代碼中的第2行:

示例代碼:

  1. db = open("output.txt""a"
  2. a = "Hello"+1 
  3. b = "How do you do?" 
  4. db.write(a+", "+b+" 
  5. ") 

錯誤信息:

  1. raceback (most recent call last): 
  2.   File "C:\Users\Omisola Idowu\Desktop\Lato 
  3. oup 
  4. ew.py", line 2, in  
  5.     a = "Hello"+1 
  6. TypeError: can only concatenate str (not "int"to str 

下面讓我們再來看另一個錯誤示例:

代碼:

  1. def findTotal(a): 
  2.     for i in a 
  3.         print(sum(i)*2) 

錯誤信息:

  1. File "C:\Users\Omisola Idowu\Desktop\Lato 
  2. oup 
  3. ew.py", line 2 
  4.     for i in a 
  5.              ^ 
  6. SyntaxError: invalid syntax 

顯然,Python指出了第2行的語法錯誤。如果您熟悉Python的話,就能夠一眼看出:實際上,這是因為在for循環(huán)后面缺少的一個冒號。

3.在命令行上利用Trace方法

雖然您可以使用內置的集成開發(fā)和學習環(huán)境(Integrated Development and Learning Environment,IDLE)去調試Python,但是它不一定適合大型的軟件項目。因此,調試Python的可用方法之一實際上是采用命令行界面(command-line interface,CLI)。它與在JavaScript中運行console.log()有著相似的效果。

如果您在代碼執(zhí)行過程中遇到了錯誤,則可以啟動CLI,并使用trace命令去試著運行有問題的腳本。其基本工作原理是對代碼進行逐行檢查,并對發(fā)現(xiàn)問題的地方予以解析。

若要調用該方法,請在命令行中,以如下方式運行代碼文件:

  1. python -m trace --trace file_name.py 

在大型項目中,雖然以上述方式運行整個腳本并不切實際,但是您可以創(chuàng)建一個單獨的Python文件,將每個代碼塊(一次僅一段)逐個粘貼到該文件中,然后分別運行上述命令。在此,您可以將其視為單元性調試的一種特有形式。

4.測試您的代碼

除了上述提到的異常原因之外,錯誤的布爾值(boolean)有時也會導致您的程序在部署中表現(xiàn)異常或出現(xiàn)錯誤。單元測試往往涉及到需要隔離代碼中的某些單元(塊或行),以測試具體的性能、效率、以及正確性等指標。它們對于程序代碼而言都是極其重要的。在單元測試中,我們可以使用多種調試技術,來通過assert函數(shù)對代碼的正確性進行分析,以及檢查代碼在運行過程中所需的時間等維度指標。

在實際生產環(huán)境中,我們可以創(chuàng)建一個名為test.py的單獨Python文件,并在該文件中測試每個代碼單元。如下代碼段展示了單元測試的一個示例:

  1. data = { 
  2. "guitars":[ 
  3. {"Seagull":"$260"}, 
  4. {"Fender":"$700"}, 
  5. {"Electric-acoustic":"$600"
  6. if len(data["guitars"])==2: 
  7.     for i in data["guitars"]: 
  8.         print(i) 
  9. assert len(data["guitars"])==2, "Length less than what's required, should be 3" 

可見,由于數(shù)組的長度小于3,因此Python會觸發(fā)如下斷言錯誤:

  1. AssertionError: Length less than what's required, should be 3 

5.使用日志

作為調試代碼的另一種方法,Python內置了一套日志庫,可供日志的檢查與勘誤。您可以通過鏈接--https://docs.python.org/3/howto/logging.html,來進一步了解其工作原理,以及如何在控制臺中的運行和捕獲它們。如果您覺得在部署應用的過程中,無法通過控制臺來查看到日志,則可以通過設置簡單郵件傳輸協(xié)議(SMTP),以便于將代碼日志以電子郵件的方式及時捕獲與分析。

6.使用標準的Python調試器

Python有一個被稱為pdb的、非常流行的板載調試器。由于它是內置的,因此您只需要將pdb導入待測試文件中即可。pdb模塊可以通過對代碼采取事后執(zhí)行(post-mortem)的方式,來調試程序在運行過程中出現(xiàn)的突然崩潰現(xiàn)象。

您既可以將pdb用于運行整個Python文件,也可以僅執(zhí)行某個單元,以深入到程序的每一行去發(fā)現(xiàn)潛在的錯誤。在實際使用中,您需要首先打開Python文件,然后通過importpdb;pdb.set_trace(),來啟動pdb調試器。接著,您可以通過CLI運行待測試的Python文件(請參見--https://www.makeuseof.com/run-python-script/):

  1. Python Your_Python_file.py 

通過如下帶有h的命令,您可以查看到pdb的所有可用命令列表:

  1. (pdb) h 

列表的輸出如下圖所示:

例如,您可以通過如下命令,來逐行羅列出代碼:

  1. (pdb) l 

7.使用IDE進行調試

IDE也是用于調試Python腳本的寶貴工具。其中:

  • Visual Studio Code(https://code.visualstudio.com/download)能夠協(xié)助您運行與調試Python程序中的各項功能。
  • 作為一種語言類支持插件,Pylance可允許您在調試的模式下運行自己的代碼。
  • 作為另一個出色的IDE,Pycharm(https://www.jetbrains.com/pycharm/download/)可以幫助您更加深入地查找代碼中的錯誤。
  • Eclipse(http://www.eclipse.org/downloads/packages/)也提供了一個名為Pydev的第三方插件,以實現(xiàn)針對Python腳本的輕松調試。

8.在網上搜索解決方案

鑒于Python具有龐大的開發(fā)者社區(qū),您不妨將互聯(lián)網作為尋找解決Python代碼問題的可靠資源。例如,Stackoverflow(https://stackoverflow.com/)便是一個流行的代碼社區(qū),您可以在其中進行各種互動式的問答。當然,YouTube上也包含了大量的有關Python編程的實用視頻。

原文標題:How to Debug Your Python Code,作者:IDOWU OMISOLA

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2024-11-25 16:08:57

Python代碼代碼調試

2021-08-24 23:23:35

Python工具開發(fā)

2009-12-04 13:45:12

VS調試

2022-03-04 20:28:02

VueReact網頁

2023-09-04 11:46:09

C#動態(tài)代碼

2024-03-06 08:52:59

C#Emit代碼

2010-03-01 11:06:52

Python 調試器

2014-05-14 00:50:18

JoyentNode

2020-06-23 09:48:09

Python開發(fā)內存

2020-04-26 10:01:14

編程學習技術

2020-06-14 14:48:23

機器學習Python

2012-03-01 11:47:01

2021-11-12 08:00:00

抽象開發(fā)代碼

2021-11-17 21:58:02

Python編程語言

2020-01-06 10:01:12

JavaScript瀏覽器HTML

2021-07-02 07:06:20

調試代碼crash

2015-10-27 10:08:55

移動戰(zhàn)略BYOD

2022-04-12 13:22:50

物聯(lián)網物聯(lián)網業(yè)務IOT

2021-07-29 11:40:22

Gartner數(shù)據質量數(shù)據分析

2023-01-30 15:55:08

點贊
收藏

51CTO技術棧公眾號