再一次重新學習Python 錯誤 除錯和測試

2021-08-21 17:33:48 字數 1810 閱讀 2440

一種用try...except...finally捕獲錯誤並用raise丟擲

assert 斷言

凡是用print來輔助檢視的地方,都可以用斷言(assert)來替代:

# err.py

def foo(s):

n = int(s)

assert n != 0, 'n is zero!'

return 10 / n

def main():

foo('0')

assert的意思是,表示式n != 0應該是true,否則,後面的**就會出錯。

如果斷言失敗,assert語句本身就會丟擲assertionerror

$ python err.py

traceback (most recent call last):

...assertionerror: n is zero!

print替換為logging是第3種方式,和assert比,logging不會丟擲錯誤,而且可以輸出到檔案:

# err.py

import logging

s = '0'

n = int(s)

logging.info('n = %d' % n)

print 10 / n

logging.info()就可以輸出一段文字。執行,發現除了zerodivisionerror,沒有任何資訊。怎麼回事?

別急,在import logging之後新增一行配置再試試:

import logging

logging.basicconfig(level=logging.info)

看到輸出了:

$ python err.py

info:root:n = 0

traceback (most recent call last):

file "err.py", line 8, in print 10 / n

zerodivisionerror: integer division or modulo by zero

這就是logging的好處,它允許你指定記錄資訊的級別,有debuginfowarningerror等幾個級別,當我們指定level=info時,logging.debug就不起作用了。同理,指定level=warning後,debuginfo就不起作用了。這樣一來,你可以放心地輸出不同級別的資訊,也不用刪除,最後統一控制輸出哪個級別的資訊。

logging的另乙個好處是通過簡單的配置,一條語句可以同時輸出到不同的地方,比如console和檔案

啟動python的偵錯程式pdb,讓程式以單步方式執行,可以隨時檢視執行狀態。

這個方法也是用pdb,但是不需要單步執行,我們只需要import pdb,然後,在可能出錯的地方放乙個pdb.set_trace(),就可以設定乙個斷點:

再一次重新學習Python 物件導向高階程式設計

def set age self,age 定義乙個函式作為例項方法 self.age age from types import methodtype s.set age methodtype set age,s,student 給例項繫結乙個方法 s.set age 25 呼叫例項方法 s.age...

再一次求助

編24點程式時遇到的問題 大佬好呀,python小白又來求助啦!這次的問題是在編24點時遇到的乙個問題 如何將使用者輸入的數字運算出結果?源 import random shuzi str one str random.randint 1,10 shuzi str two str random.ra...

開始再一次學習Git

這是乙個自己的管理自己學習經驗的文件。由於學習總是斷斷續續,所以沒有花時間整個學習git,這次勢必要搞懂git的相關的機制。我看的是廖雪峰的git教程,講的很不錯。接下來,開始做相關的筆記。可能會陸陸續續的進行修改 2017.3.24 今天下午,在上 軟體測試 的時候就在看git,本來是想在idea...