python調試程序
❶ 調試python代碼的方法有哪些
本文討論在沒有方便的IDE工具可用的情況下,使用pdb調試python程序
源碼例子
例如,有模擬稅收計算的程序:
#!/usr/bin/python
def debug_demo(val):
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
debug_demo函數計算4500的入賬所需的稅收。
如何調試?
1.加入斷點
在需要插入斷點的地方,加入紅色部分代碼:如果_DEBUG值為True,則在該處開始調試(加入_DEBUG的原因是為了方便打開/關閉調試)。
#!/usr/bin/python
_DEBUG=True
def debug_demo(val):
if _DEBUG == True:
import pdb
pdb.set_trace()
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
2.開始運行調試
運行程序./debug_demo.py,得到
> /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
-> if val <= 1600 :
(Pdb)
-> val <= 1600 : 指示當前執行的語句,(Pdb)等待你的調試指令. pdb的指令很豐富,輸入h指令可以查看指令的使用方法。下面簡單介紹常用指令:
查看代碼上下文,l(小寫L)
(Pdb) l
2 _DEBUG=True
3 def debug_demo(val):
4 if _DEBUG == True:
5 import pdb
6 pdb.set_trace()
7 -> if val <= 1600 :
8 print "level 1"
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
(Pdb)
左邊是行號,右邊是代碼正文。
監視變數:p 變數名
(Pdb) p val
4500
(Pdb)
單步執行: n
-> elif val <= 3500 :
(Pdb) l
5 import pdb
6 pdb.set_trace()
7 if val <= 1600 :
8 print "level 1"
9 print 0
10 -> elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
加入斷點:b 行號
(Pdb) b 14
運行到斷點: c
(Pdb) c
> /*****
-> print "level 3"
(Pdb) l
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 B-> print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
16 else:
17 print "level 4"
18 print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
19
執行到函數返回前: r
(Pdb) r
level 3
195.0
--Return--
> /****()
->None
-> print (val - 3500) * 0.10 + (3500-1600) * 0.05
(Pdb)
說明:
pdb還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 命令。就可以得到命令的詳細幫助。
不過,我個人認為一般無需啟動這種調試方法,一般使用日誌輸出進行調試即可,除非遇到了非常微妙的錯誤。這時,單步調試的威力便顯示出來了
❷ 如何用pdb進行python調試
本文章講述了如何用pdb進行python調試講解.
當手邊
沒有IDE,面對著python調試犯愁時,你就可以參考下本文;(pdb 命令調試)
和 (pdb)help
用pdb進行python調試,用法基本和gdb差不多,
先看一個簡單的例子:
epdb1.py .# epdb1.py -- experiment with the Python debugger, pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
print final
比如要對這個程序進行調試:
1:在文件前面加上這一句,引入調試的模塊。
import pdb
2:在要開始調試的一行加上pdb.set_trace()文件變成:
# epdb1.py -- experiment with the Python debugger, pdb
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final 可以運行這個程序,到斷點出會停氏臘下來,和gdb類似,
可以執行命令:
直接回車是重復前一條命令!
p(print) 查看一個變數值
n(next) 下一步
s(step) 單步,可進入函數
c(continue)繼續前進
l(list)看源代碼
用pdb調試有多種方式可選:
1.命令行啟動目標程序,加上-m參數,這樣調用myscript.py的話斷點就是程序的執行第一行之前
python -m pdb myscript.py
2. 在Python交互環境中啟用調試
>>> import pdb
>>> import mymole
>>> pdb.run('mymole.test()')
3.比較常用的,就是在程序中間插入一段程序,相對於在一般IDE裡面打上斷點然後啟動debug,不過這種方式是hardcode的 if __name__ == "__main__" :
a = 1
importpdb
pdb .set_trace()
b = 2
c = a + b
print( c)
然後正常運行腳本,到了pdb.set_trace()那就會定下來,就可以看到調試的提示符(Pdb)了
常用的調試命令 h(elp),會列印當前版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:"h l" - 查看list命令
l(ist),可以列出當前將要運行的代碼塊
(Pdb) l
497 pdb.set_trace()
498 base_data = {}
499 new_data = {}
500 try:
501 execfile(base_file_name,{},base_data)
502 -> execfile(new_file_name,{},new_data)
503 except:
504 logger.writeLog("error! load result log error!")
握老505 print "load cmp logs error!"
506 raise Exception, "load cmp logs error!"
507>斷點設置
(Pdb)b10 #斷點設置在本py的第10行
或(Pdb)bots.py:20 #斷點設置到 ots.py第20行
刪除斷點(Pdb)b #查看斷點編號
(Pdb)cl 2 #刪除第2個斷點
>運行
(Pdb)n #單步運行
(Pdb)s #細點運行 也就是會下到,方法
(Pdb)c #跳到下個斷點
>查看
(Pdb)p param #查看當前 變數值
(Pdb)l #查看運行到某處代碼
(Pdb)a #查看全部棧內變數 b(reak), 設置斷點,例如 "b 77″,就是在當前腳本的77行打上斷點,還能輸入函數名作為參數殲皮滑,斷點就打到具體的函數入口,如果只敲b,會顯示現有的全部斷點
(Pdb) b 504
Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504 condition bpnumber [condition],設置條件斷點,下面語句就是對第4個斷點加上條件"a==3"
(Pdb) condition 4 a==3
(Pdb) b
Num Type Disp Enb Where
4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
stop only if a==3 cl(ear),如果後面帶有參數,就是清除指定的斷點(我在Python2.4上從來沒成功過!!!);如果不帶參數就是清除所有的斷點
(Pdb) cl
Clear all breaks? y disable/enable,禁用/激活斷點
(Pdb) disable 3
(Pdb) b
Num Type Disp Enb Where
3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505 n(ext),讓程序運行下一行,如果當前語句有一個函數調用,用n是不會進入被調用的函數體中的
s(tep),跟n相似,但是如果當前有一個函數調用,那麼s會進入被調用的函數體中
c(ont(inue)),讓程序正常運行,直到遇到斷點
j(ump),讓程序跳轉到指定的行數
(Pdb) j 497
> /home/jchen/regression/regressionLogCMP.py(497)com pareLog()
-> pdb.set_trace() a(rgs),列印當前函數的參數
(Pdb) a
_logger =
_base = ./base/MRM-8137.log
_new = ./new/MRM-8137.log
_caseid = 5550001
_toStepNum = 10
_cmpMap = {'_bcmpbinarylog': 'True', '_bcmpLog': 'True', '_bcmpresp': 'True'} p,最有用的命令之一,列印某個變數
(Pdb) p _new
u'./new/MRM-8137.log' !,感嘆號後面跟著語句,可以直接改變某個變數
q(uit),退出調試
==============================================================================================
在python中使用pdb模塊可以進行調試
import pdb
pdb.set_trace()
也可以使用python -m pdb mysqcript.py這樣的方式
(Pdb) 會自動停在第一行,等待調試,這時你可以看看 幫助
(Pdb) h
說明下這幾個關鍵 命令
>斷點設置
(Pdb)b 10 #斷點設置在本py的第10行
或(Pdb)b ots.py:20 #斷點設置到 ots.py第20行
刪除斷點(Pdb)b #查看斷點編號
(Pdb)cl 2 #刪除第2個斷點
>運行
(Pdb)n #單步運行
(Pdb)s #細點運行 也就是會下到,方法
(Pdb)c #跳到下個斷點
>查看
(Pdb)p param #查看當前 變數值
(Pdb)l #查看運行到某處代碼
(Pdb)a #查看全部棧內變數
(Pdb)w 列出目前call stack 中的所在層。
(Pdb)d 在call stack中往下移一層
(Pdb)u 在call stack中往上移一層。如果在上移一層之後按下 n ,則會在上移之後的一層執行下一個敘述,之前的 function call 就自動返回。
(Pdb)cl 清除指定的斷點。如果沒有帶參數,則清除所有斷點。
(Pdb)disable 取消所有斷點的功能,但仍然保留這些斷點。
(Pdb)enable 恢復斷點的功能。
(Pdb)ignore 設定斷點的忽略次數。如果沒指定 count,其初始 為 0。當 count 為 0 時,斷點會正常動作。若有指定 count,則每次執行到該中斷, count 就少 1,直到 count 數為 0。
(Pdb)condition bpnumber [condition]
(Pdb)j(ump) lineNo. 跳到某行執行。只有在 call stack 的最底部才能作用。
(Pdb)l 列出目前所在檔案中的位置。連續地 l 命令會一直列到檔案結尾,可以使用指定行數或范圍來列印。
(Pdb)pp 和 p 命令類似,但是使用 pprint mole(沒用過 pprint,詳情請參考 Python Library Reference)。
(Pdb)alias 以一個"別名"代替"一群除錯命令",有點類似 c/c 的 macro(詳情請參考 Python Library Reference)。
(Pdb)unalias 取消某個 alias。
(Pdb)[!]statement 在目前的環境(context)中執行敘述。
❸ 如何調試python腳本,使用python自帶工具
如何調試python腳本,使用python自帶工具
下面我給大家簡單地介紹一下如何調試Python。
1, 首先下載並安裝Python 2.7(http://www.python.org/)
2, 寫一個簡單地Python源文件,比如test.py,內容如下:
import sys, os
def test(arg1, arg2):
print "begin test..."
fun1('1', '2')
print arg1
print arg2
def fun1(arg1, arg2):
print arg1
print arg2
if __name__ == '__main__':
test(*sys.argv[1:])
3, 右鍵test.py->Edit with IDLE進入IDLE界面,Run->Run Mole打開Python Shell窗口豎姿搏,點擊Debug->Debugger,就打開Debug Control界面,你也將會在Python Shell窗口看到如下顯示信息:
[DEBUG ON]
4, 開始調試
4.1,在Python Shell輸入如下測試行:
>>> test('3', '4')
4.2,在 fun1('1'冊模, '2')或者任意你想要查看的地方設置斷點(在IDLE界面里右鍵->set breakpoint).
4.3,回到Python Shell界面按回車,你將看到在debug control窗口裡顯示test.py的第一行。
4.4,按Go按鈕,將定位到test.py你剛才設置斷點的地方.
4.5,按Step或者Over進行調試(Step與Over的區別在於:Step將進入到函數內部進行調試,Over是指不進入到函數內部進行調試,而是直接執行完這個函數).
4.6,你將看到在Python Shell窗口裡分步看到列印的內容如下:
[DEBUG ON]
>>> test('3', '4')
begin test...
1
2
3
4
[DEBUG ON]
>>余祥>
❹ 如何用pdb進行python調試
Debug 對於是一項非常重要盯侍的功能,它能夠幫助我們准確的定位錯誤,發現程序中的 bug。
python 提供了一系列 debug 的工具和包,可供滾歷我們選擇。
pdb 是 python 自帶的一個包,為 python 程序提供了一種交互的源代碼調試功能,主要特性包括
設置斷點
單步調試
進入函數調試
查看當凱備吵前代碼
查看棧片段
動態改變變數的值
啟動方式:python -m pdb xxx.py
❺ 編輯、解釋和運行調試Python程序需要什麼條件
編輯只需要可以編輯文件的工具即可,例如記事本,notepad++等,解釋和運行調試的話只需要安裝Python運行環境即可。
❻ 如何運行python程序
運行python程序的兩種方式是什麼?python有兩種運行方式:互動式和腳本式。互動式可以通過cmd命令行窗口或者IDEL實現,而腳本式通過寫一個腳本(.py結尾的文檔)實現。其中互動式主要用於簡單的python運行或者測試調試python時用到,而腳本式是運行python程序的主要方法。
第一,互動式,通過Windows命令行工具進行互動式運行python。同時按下Windows鍵和R鍵,啟動「運行」,在「運行」中輸入cmd然後回車,即彈出命令行工具,然後輸入python回車,即出現如下界面。
第二,然後輸入print('Helloworld!'),既可以敲一行代碼,與python交互一次,python執行一次。
第三,通過IDEL互動式運行python。從「開始」中找到Python->IDEL,如下圖。
第四,啟動IDEL後,同樣輸入print('Helloworld!'),既可以敲一行代碼,與python交互一次,python執行一次。只不過IEDL中python代碼可以高亮顯示。
第五,腳本式鎮告段運行python,在IDEL中點擊file->newfile,就會彈出一友手個未命名(Untitled)的腳本窗口,然後輸入如下代碼,並按Ctrl+S保存。
#20181216攝氏溫度和華氏溫度之間轉換
t=input('請輸入帶有單位符號的溫度(例如37C或者100F):')
ift[-1]in('f','F'):
C=(eval(t[:-1])-32)/1.8 #如果輸入為華氏溫度,那麼轉換為攝氏溫度
print('轉變為攝氏溫度%.2fC為:'%C)
elift[-1]in('c','C'):
F=eval(t[:-1])*1.8+32 #如果輸入為攝氏溫度,那麼轉御譽換為華氏溫度
print('轉變為華氏溫度%.2fF為:'%F)
else:
print('輸入格式有誤,請輸入帶有單位符號的溫度(例如37C或者100F):')
第六,按F5運行上一步保存的***.py腳本,就會出現如下界面,提示:請輸入帶有單位符號的溫度(例如37C或者100F),隨便輸入一下就行,即通過腳本運行了python。
那麼,有關運行python程序的兩種方式的內容,小編就介紹到這里了。小夥伴們可以用心了解一下哦!
本篇文章使用以下硬體型號:聯想小新Air15;系統版本:win10;軟體版本:python3.0。
❼ vs未能啟動調試程序pythone
您好,VS未能啟動調試程序Python可能是由於多種原因引起的。以下是一些可能的解決方案:
1. 檢查Python環境是否正確安裝並配置。確保Python解釋器的路徑正確設置。
2. 檢查VS是否正確配置。在VS中,選擇「工具」>「選項」>「Python工具」>「環境變數」,確保Python解釋器的路蔽慎氏徑正確設置。
3. 檢查代碼是否存在語法錯誤。語法錯誤可能會導致調試程序無法啟動。
4. 檢查代碼是否存在死循環或無限遞歸。宏散這些問題可能會導致程序無法正常運行。
5. 檢查是否有其他程序佔用了Python解釋器。關閉其他程序,然後重新啟動VS。
6. 嘗試重新安裝Python和VS。有時候重新安裝可以解決問題。
希望以上解決方案能夠幫助您解決問題。如果問題仍然存在,請提供更多孝陸詳細信息,以便我們更好地幫助您。
❽ python 怎麼用ide調試
方法很多,你打開Python IDE(GUI)後,界面跟cmd命令行很類似,如果你寫的程序很復雜當然不適合這種方式了,可以直接-------File-NewFile,這個時候就會出來一個Untitled窗口,你在這里開始寫程序就行了,最後保存下,就是一個**.py的python程序了,至於怎麼運行它,你可以打開這個**.py文件,直接按F5就行,也可以在cmd窗口裡用python **.py都可以
❾ 如何進行Python 調試器調試
本文首先介紹一下
Python 調試器
的歷史,總結了Python的強大之處和不足並且指出了與其他腳本語言,相比,以及Python語言與其他語言的優勢所在,下面進行學習介紹說明。
PyDev 就能顯示出一個超鏈接,這樣您可以在導入庫或函數的源代碼之間導航。請注意,為了在您自己的源代碼中跨模塊使用該特性(從一個模塊鏈接到另一個模塊),必須修改PYTHONPATH 環境變數。
在其中加入這些模塊,這樣 PyDev 就可以找到它們了。
Python 調試器
是最近才加入 PyDev 插件中的。要使用調試器,可在Python編輯器中想中斷的代碼行的左側點擊,設置斷點。
我在 feedparser.py 的 1830 行處設置了斷點。然後在 Navigator 視圖中選擇這個Python模塊,點擊右鍵,選擇「PythonDebug...」。這時將顯示與前面相似的一個啟動配置窗口。點擊 Debug 進入 Debug 視角,同時啟動調試器。 左上角的 Debug 視圖顯示當前正在執行的進程和線程,右上角的 Variables 視圖顯示當前運行域中的所有變數。
Python編輯器會顯示調試器目前停在哪條語句上,同時所有的輸出信息都顯示與 Console 視圖中。調試器可以通過 Debug 視圖底部的按鈕或 Run 菜單進行控制。 要運行剛剛在 Eclipse 中創建的啟動器,可選擇 Run External ToolspythonInterpreter。
Python解釋器的輸出顯示在 Console 視圖中。
❿ python調試程序BUG的心得技巧分享
【導讀】相信各位Python工程師們在寫Python代碼的時候,免不了經常會出現bug滿天飛這種情況,這個時候我們可能就得一個標點一個標點的去排查,費時又費力,但是,我們又很難發現到底是其中的哪一個步驟,導致了這些問題的出現。導致這些問題的其中一個原因,就是我們沒有養成良好的編程習慣。編程習慣就好比是電影中的特效。電影特效越好,呈現出來的觀影效果也自然越好。同樣,如果我們能夠養成好的編程習慣,在查找錯誤的時候,自己的思路就會更加清晰。下面是小編整理的解決Python項目bug的心得技巧分享,包含六小點,希望對大家有所幫助。
方法一:使用項目管理工具
無論Python項目簡單與否,我們都應該使用Git進行版本控制。大部分支持Python的IDE(集成開發環境)都內置了對Git這一類項目管理工具的支持。
我們在修改代碼時,常常會出現改著改著程序就崩了的情況,改出的最新版本有時候還不如上一個版本。而Git,恰好能夠及時幫我們保存之前的版本。使用了它以後,我們也不需要不停地用「ctrl+z」來撤回代碼了。
方法二:使用Python的內置函數
Python的內置函數和標准庫都可以處理常見的用例,而不需要自己重新定義函數。
但是,剛剛入門的Python開發人員們對其中的函數並不熟悉。所以他們經常會遇到這樣一個問題——在不需要記住內容的情況下,如何才能知道標准庫中的內容是否涵蓋了自己的用例?最簡單的方法是將標准庫索引和內置函數概述頁添加為書簽,並且在遇到「日常編程」類問題的時候立即瀏覽一下。我們使用這些函數的頻率高了,自然也就能記住這些函數了。
方法三:使用正確的模塊
與內置函數和標准庫一樣,Python中大量的第三方模塊集合,也可以幫助我們節省大量的人力。通過PyPI的Web前端,可以針對我們的問題觸發搜索詞,我們很容易就能找到適合自己的解決方案。
方法四:使用OOP
面向對象編程(OOP)將數據結構與用於操作它們的方法捆綁在一起,從而使編寫高級代碼更加容易。OOP非常適合用於Python這一類高級語言,尤其是項目非常復雜的時候。熟悉Python的開發人員都知道,使用OOP可以減少代碼量,從而節省大量的時間。
但是,也不是所有的項目都需要使用OOP。如果項目沒有特別要求,一些小型的項目就可以不用OOP。
方法五:編寫測試代碼並不斷測試
一個好的程序員一定知道測試之於項目的重要性。編寫測試代碼的確是一個很枯燥的過程,但是不進行測試,我們就無法發現程序的問題所在。
如果一個項目非常復雜的話,我們就必須要做到及時測試。越早測試,就能越早發現問題。而不是說等代碼全部寫完了,才開始進行測試,這樣反而會導致更多的錯誤和更大的工作量。
當然,我們也可以尋找專業的軟體測試人員,來幫助我們進行測試。這樣我們也可以把更多的精力投入到項目程序本身。
方法六:選擇正確的Python版本
部分人仍然在使用Python2,但Python官方的開發團隊早已經不對這一版本進行維護了。聰明的開發人員都已經將Python2里的項目遷移到Python3中了。
Python目前的最新版本是Python3.8.5,但也不是說你一定要使用最新版本。專業的軟體開發人員都知道,任何軟體的最新版本都不一定是最好的,因為它仍需要開發團隊不斷地去改良。程序員一般都會使用在最新版本之前的一個版本,舊版本相對而言是比較成熟的。
無論是運用哪一種語言編寫代碼,優秀的程序員都具備良好的編程習慣。這些習慣不僅能夠讓我們思路更加清晰,也可以幫助我們減輕工作量,從而節省大量的時間。所以,可能你離優秀的程序員,只差一個好習慣了哦~
以上就是小編今天給大家整理發送的關於「解決Python項目BUG的心得技巧分享」的相關內容,希望對大家有所幫助。小編認為要想在大數據行業有所建樹,需要考取部分含金量高的數據分析師證書,這樣更有核心競爭力與競爭資本。