python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?
調(diào)試-有什么好的方法可以使我的Python代碼首次運(yùn)行?
我的代碼中出現(xiàn)了很多錯(cuò)誤。 因此,我希望能夠在一開始就將它們最小化,或者在執(zhí)行代碼之前看到盡可能多的錯(cuò)誤。 這可能嗎,如果可以,我該怎么做?
Amara asked 2020-01-05T23:02:05Z
16個(gè)解決方案
35 votes
如果語法有問題,可以嘗試使用語法突出顯示的編輯器。 除非您有一種語言的感覺,否則簡單的錯(cuò)誤將不會(huì)突然出現(xiàn)。
調(diào)試的最簡單形式是插入一些打印語句。 一種更高級(jí)(且可擴(kuò)展)的方法是使用std lib中的日志記錄模塊。
交互式解釋器是使用python代碼的絕佳工具,而IPython是對(duì)內(nèi)置REPL(讀取Eval打印循環(huán))的一項(xiàng)重大改進(jìn)。
如果您確實(shí)想逐步執(zhí)行代碼,則python調(diào)試器稱為pdb,可以從命令行調(diào)用它,也可以將其嵌入代碼中。
如果您習(xí)慣使用完全集成的IDE,我建議您將Eclipse與pydev一起使用,并且PyCharm具有出色的商業(yè)功能,其中包括自動(dòng)完成功能,快速訪問文檔以及眾多快捷方式以及許多其他有趣的功能。
JimB answered 2020-01-05T23:02:33Z
30 votes
以下是一些有助于在Python中進(jìn)行調(diào)試的技術(shù):
使用交互式外殼程序,例如ipython。 Python是一種動(dòng)態(tài)語言,您可以在鍵入時(shí)瀏覽代碼。 Shell始終在我的編輯器的第二個(gè)窗口中運(yùn)行。
從外殼程序復(fù)制粘貼到文檔字符串中的代碼說明了該函數(shù)(類,模塊)的主要用法和特殊情況。 放在if __name__=="__main__"部分中的print()允許測試模塊中的所有文檔字符串。 doctest可以與unittest輕松集成。
將print()用于永遠(yuǎn)不會(huì)發(fā)生的事情。
print()可以解決許多調(diào)試問題; 日志記錄模塊適用于長期存在的python進(jìn)程。
編寫測試(不一定在代碼之前),經(jīng)常運(yùn)行它們(自動(dòng)或最多一次按鍵); 鼻子為單元測試提供擴(kuò)展的測試發(fā)現(xiàn)和運(yùn)行功能。
偶爾跑pylint。
此時(shí),正式的python調(diào)試器幾乎沒有用。如果需要,Winpdb是一個(gè)外部多平臺(tái)GPL'ed GUI python調(diào)試器。
jfs answered 2020-01-05T23:03:25Z
15 votes
所有真正酷的東西都可以在交互式解釋器中輕松演示。 我認(rèn)為這可能是良好設(shè)計(jì)的“黃金標(biāo)準(zhǔn)”:
您可以互動(dòng)地上課嗎?
如果您可以交互地進(jìn)行工作,則可以放心地編寫可測試,簡單,可靠的單元測試和文檔測試。
而且,更重要的是,您可以進(jìn)行交互式瀏覽。 鍵入代碼并確切地看到發(fā)生了什么事,沒有比即時(shí)滿足更好的了。
可以保留已編譯的語言習(xí)慣(編寫一堆東西,調(diào)試一堆東西,測試一堆東西)。 相反,您可以編寫一些內(nèi)容,進(jìn)行探索,編寫正式的測試,然后將您的一些內(nèi)容附加到不斷發(fā)展的最終項(xiàng)目中。
您仍然要進(jìn)行總體設(shè)計(jì)。 但是,您不必浪費(fèi)時(shí)間來編寫可能有效或無效的代碼。 在Python中,您可以編寫有效的代碼。 如果不確定,則可以交互地玩它直到確定。 然后,您編寫有效的代碼。
S.Lott answered 2020-01-05T23:04:08Z
10 votes
我是python的新手,并且一直在嘗試幾種不同的調(diào)試器。 到目前為止,這是我遇到的選項(xiàng):
帶有Pydev的Eclipse-如果您已經(jīng)在使用eclipse,這可能是解決之道。 調(diào)試器運(yùn)行良好,并且功能強(qiáng)大。
Komodo IDE-輕量級(jí)的Python IDE。 基本上是文本編輯器+調(diào)試器。 找出并立即產(chǎn)生成果真的很容易。
WinPDB-嘗試下一個(gè)。 看起來很有特色,我可以使用選擇的任何編輯器。
PDB-自從我閱讀了有關(guān)WinPDB如何更好的替代方法以來,還沒有嘗試過。
使用%run命令的Ipython-我使用過IPython,但沒有像這樣的調(diào)試器。 我需要嘗試一下。 (感謝小費(fèi),EOL)
Eric IDE-也在列表中嘗試。
老式打印,斷言-簡單,有用,但不是完整的解決方案。
內(nèi)存調(diào)試-為了調(diào)試內(nèi)存問題,我遇到了一些工具:
objgraph-將生成png的參考圖。 整齊。 還有其他功能,例如:import objgraph; print(objgraph.show_most_common_types(limit = 10))將打印內(nèi)存中最常見的10種類型。
gc模塊-直接與垃圾收集器進(jìn)行交互。
笨重-堆分析器。 例如:從guppy import hpy; hp = hpy(); print(hp.heap())將打印最常見的類型,其內(nèi)存使用情況等。
這是一個(gè)非常不完整的列表,但希望它是一個(gè)好的開始。
scottm answered 2020-01-05T23:05:22Z
10 votes
Python提供了一個(gè)調(diào)試器,您可以通過它調(diào)試代碼,檢查變量并進(jìn)行操作。 請(qǐng)參閱[http://pythonconquerstheuniverse.wordpress.com/category/python-debugger/],該指南可以指導(dǎo)您進(jìn)行操作...
還要檢查python標(biāo)準(zhǔn)庫參考中的pdb[http://www.python.org/doc/2.5.2/lib/module-pdb.html]
Amit answered 2020-01-05T23:05:47Z
7 votes
盡早測試并經(jīng)常測試。
這并不一定意味著首先要進(jìn)入測試驅(qū)動(dòng)的設(shè)計(jì)池(盡管這不是一個(gè)壞主意)。 這只是意味著,只要有可用的東西,就測試您的對(duì)象和方法。 在進(jìn)行測試之前,請(qǐng)不要等到擁有大量代碼。
花一些時(shí)間來學(xué)習(xí)測試框架。 如果您鍵入測試用例很簡單,那么您很有可能會(huì)這樣做。 如果您沒有任何類型的框架測試,可能會(huì)很痛苦,因此請(qǐng)避免使用它。 因此,盡早養(yǎng)成良好的習(xí)慣,這樣一來,您的問題就會(huì)減少。
Bryan Oakley answered 2020-01-05T23:06:17Z
7 votes
通常,我只使用一堆打印語句。
page = grabpage(url)
print "Page content:", page
print "page type():", type(page)
有時(shí)執(zhí)行以下操作很有用:
debug = True
if debug: print "page content", page
..您可以通過將調(diào)試變量更改為False來快速禁用所有調(diào)試打印語句。
盡管在大多數(shù)情況下,打印調(diào)試會(huì)使您受益匪淺,但有時(shí)很難調(diào)試諸如循環(huán)或一系列if / else / try / except / etc之類的東西。 為此,允許單步執(zhí)行代碼并設(shè)置斷點(diǎn)的調(diào)試器很有用。
winpdb myscript --arg 4 -b 4包含在Python中。 這是一個(gè)很好的簡單教程。 您甚至可以執(zhí)行一些操作,例如在運(yùn)行時(shí)更改變量(本教程將介紹)。 可以在這里找到更長的教程
有一個(gè)非常不錯(cuò)的GUI等效pdb-Winpdb
基本上,您運(yùn)行winpdb myscript --arg 4 -b 4,然后它將命令加載到終端中,在左側(cè)顯示您的代碼,并帶有當(dāng)前,本地/全局變量(及其值)列表以及當(dāng)前的調(diào)用堆棧。
然后,您可以通過單擊“步驟”(或F6)來瀏覽代碼。 F5運(yùn)行代碼。 如果單擊行號(hào)旁邊的行,它將設(shè)置一個(gè)斷點(diǎn),代碼將在該斷點(diǎn)處自動(dòng)步進(jìn)(當(dāng)您按run鍵時(shí))。
我發(fā)現(xiàn)它易于使用,并且具有許多其他增強(qiáng)功能(例如遠(yuǎn)程調(diào)試),因此您可以在要調(diào)試的應(yīng)用程序中運(yùn)行后端部分(rpdb2),然后將Winpdb連接到它(加密)。 在PDB中支持線程和其他有用的東西,您也可以訪問類似pdb的控制臺(tái)。
dbr answered 2020-01-05T23:07:14Z
6 votes
我使用此技巧將Python設(shè)置為在出現(xiàn)未捕獲的異常時(shí)自動(dòng)啟動(dòng)調(diào)試器。 這樣,您可以輕松地檢查程序的狀態(tài)而無需太多的日志代碼。 (此外,向我發(fā)送低吼通知。)
哦,這樣,您可以通過添加以下代碼在代碼中創(chuàng)建一個(gè)斷點(diǎn)
if answer == 42:
1/0
Michael Kuhn answered 2020-01-05T23:07:39Z
5 votes
自由地使用assert語句。
answered 2020-01-05T23:07:58Z
4 votes
在執(zhí)行之前識(shí)別錯(cuò)誤是靜態(tài)檢查/分析的領(lǐng)域。 我很幸運(yùn)使用PyChecker進(jìn)行Python代碼的基本靜態(tài)檢查。
pycheesecake網(wǎng)站上有一個(gè)非常好的Python測試工具摘要。
Andrew Beyer answered 2020-01-05T23:08:23Z
4 votes
Eclipse的PyDev插件是我選擇的工具。 它可以識(shí)別簡單的語法錯(cuò)誤和縮進(jìn)錯(cuò)誤,并用紅線強(qiáng)調(diào)該錯(cuò)誤。 它具有強(qiáng)大的調(diào)試器,甚至還有一個(gè)名為PyLint的插件,它會(huì)警告您有關(guān)危險(xiǎn)代碼的信息。
編輯:它還具有關(guān)于運(yùn)行時(shí)錯(cuò)誤,部分自動(dòng)完成和一些其他精美功能的用戶友好堆棧跟蹤。
再次編輯:我沒有注意到在頂部文章中提到了pydev。 我希望我能帶來一些其他好處。
Nailer answered 2020-01-05T23:08:52Z
1 votes
python -m pdb yourcode.py應(yīng)該做到這一點(diǎn)。另外,您可以在代碼中“導(dǎo)入pdb”,然后使用pdb.set_trace()設(shè)置斷點(diǎn)。請(qǐng)參閱手冊(cè)以獲取更多信息:[http://www.python.org/doc/2.5.2/lib/module-pdb.html]
Sridhar Iyer answered 2020-01-05T23:09:13Z
1 votes
有一個(gè)非常不錯(cuò)的Python GUI調(diào)試器Winpdb。 試試看。建立在wxWidgets庫和多平臺(tái)上。
RobertVa answered 2020-01-05T23:09:33Z
1 votes
為了獲得最全面的體驗(yàn),您可以使用完整的IDE,例如PyCharm:
[http://blog.jetbrains.com/pycharm/files/2011/05/template-debug2.png]
aaimnr answered 2020-01-05T23:09:57Z
0 votes
Eric4 IDE還具有出色的內(nèi)置調(diào)試器。
fccoelho answered 2020-01-05T23:10:17Z
0 votes
IPython Python Shell具有%run命令,該命令在出現(xiàn)問題時(shí)會(huì)自動(dòng)調(diào)用調(diào)試器。 然后,您可以檢查變量,單步執(zhí)行代碼等。
您可以使用%run命令從IPython運(yùn)行程序。
更普遍地說,就像其他答案中提到的那樣,一個(gè)好的Python shell是您的朋友。 IPython是您最好的朋友。 :)
Eric O Lebigot answered 2020-01-05T23:10:46Z
總結(jié)
以上是生活随笔為你收集整理的python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android文件选择器_Android
- 下一篇: python正则表达式中的转义字符_详解