
本文整理自愛數據學院中的問答
更多精彩問答,進入下方社區網站查看
http://www.lovedata.cn/invitation
社區精選話題 第40期
Python錯誤處理及代碼調試方法
一次寫完代碼程序并能夠正常運行的概率很小很小,總會有各種各樣的錯誤bug需要處理。有的報錯簡單,看看報錯信息簡單修改一下就可以了。
但是有的報錯很復雜,特別是一些復雜長代碼,需要我們定位到錯誤的位置,需要判斷是什么變量出現了問題,因此我們除了會寫代碼之外,還需要會解決常見的錯誤,那么具體有哪些處理錯誤的方法呢,具體簡單介紹以下幾塊內容:
1
異常處理
基本語法:
try:
??#要運行別的代碼
except?:
??#如果在try部份引發了'xxxError'異常就會執行這一步語句
except?,:
??#如果上一個except語句引發了'xxxError'異常,獲得附加的數據,并執行這一部分的語句
else:
??#如果沒有出現異常要執行的代碼
finally:
??#無論發生異常與否,最終都要執行的代碼
比如:
try:
??print('執行try部分語句:')
??i =?input('輸入一個除數:')
??result =?10?/ i
??print('result:', result)
except ZeroDivisionError:
??print("除數不能為0")
else:
??print("成功輸出結果")
finally:
??print("無論發生異常與否,我都會在這里")
當然這里的except后面可以省略錯誤名稱,但是不建議。省略就意味著只要有錯誤就執行這一部分代碼,比如我在這里輸入一個字母a,明明錯誤應該是除數不能為字符串,這里仍然說除數不能為0是不是就不正確了,所以盡量寫出錯誤的名稱。
在這個語法中,try是核心成員,意思是不能沒有try,其他的內容都可以或多或少的省略掉,比如try-except,try-finally等。
2
debug調試
調試有很多種方法,這里列出主要的幾種方法:
1.用print語句
用print()語句把可能有問題的每一個過程都進行輸出,就像上面異常處理當中的一樣,這種方法簡單粗暴,但是在處理完所有的錯誤之后運行可能會有很多的無用信息,所以最終還要回來刪掉這些print語句,于是有了下面的方法。
2.斷言(assert)
在這里“斷言”是一種程序設計的專業術語,是一種放在程序中的一階邏輯(如一個結果為真或是假的邏輯判斷式),目的是為了標示與驗證程序開發者預期的結果。凡是用print()來輔助查看的地方都可以用斷言(assert)來進行替代。
但是在程序中如果導出都是assert也并沒有比print()好到哪里去,不過可以通過社吹Python解釋的-o參數來啟用或停用assert。
3.logging
把print()替換成logging是第三種方式,和assert比,logging不會拋出錯誤,而且還可以輸出到文件中形成一個日志文件。
logging的好處是,在運行代碼中不會拋出錯誤,而是把錯誤輸出到文件中,還可以指定記錄信息的級別,有debug、info、warning、error等,且只會有一個生效。
4.pdb
第四種方式是啟動Python的調試器pdb,讓程序以單步方式運行,可以隨時查看運行的狀態,就像使用jupyter notebook來一行一行運行代碼一樣,但是jupyter notebook的功能會更強大一些。
5.IDE
利用一些支持調試功能的IDE工具來進行調試,比如VS code,PyCharm等
6.jupyter notebook
最喜歡的方式就是使用jupyter notebook來進行調試代碼,可以自己設置一次運行多少行代碼,能夠準確定位到具體的錯誤位置,也是非常推薦的一個方式來進行代碼的調試。
最后,代碼調試是一個非常需要耐心的過程,也是體現學習程度的一個很重要的技能,希望大家能夠好好掌握~
參考文章:https://www.liaoxuefeng.com/wiki/1016959663602400/1017602696742912
-?END -
本文為中國統計網社區產出內容,未經允許禁止轉載
贈書活動中獎名單如下:
請未聯系【小數】發送郵寄信息的讀者,盡快聯系我們!