# 在程式執行的過程中,如果發生了錯誤,可以事先約定返回乙個錯誤**,這樣,就可以知道是否有錯,以及出錯的原因
# # # try
# 當我們認為某些**可能會出錯時,就可以用try來執行這段**,如果執行出錯,則後續**不會繼續執行,而是直接跳轉至錯誤處理**,即except語句塊,
# 執行完except後,如果沒有錯誤發生,可以在except語句塊後面加乙個else,當沒有錯誤發生時,會自動執行else語句,如果有finally語句塊,則執行finally語句塊,至此,執行完畢。
# valueerror zerodivisionerror
try:
print('try...')
r = 10 / 2
print('result:', r)
except exception as e:
print('except:', e)
else:
print('no error!')
finally:
print('finally...')
print('end')
#使用try...except捕獲錯誤還有乙個巨大的好處,就是可以跨越多層呼叫,所有不需要在每個可能出錯的地方去捕獲錯誤,只要在合適的層次去捕獲錯誤就可以了
##呼叫棧
#如果錯誤沒有**獲,它就會一直往上拋,最後被python直譯器捕獲,列印乙個錯誤資訊,然後程式退出。
## 記錄錯誤
# 既然我們能捕獲錯誤,就可以把錯誤堆疊列印出來,然後分析錯誤原因,同時,讓程式繼續執行下去。
# python內建的logging模組可以非常容易地記錄錯誤資訊:
# 通過配置,logging還可以把錯誤記錄到日誌檔案裡,方便事後排查。
import logging
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except exception as e:
logging.exception(e)
main()
print('end') # 這裡最終會執行,
# 丟擲錯誤
# 首先根據需要,可以定義乙個錯誤的class,選擇好繼承關係,然後,用raise語句丟擲乙個錯誤的例項:
class fooerror(valueerror):
pass
def foo1(s):
n = int(s)
if n==0:
raise fooerror('invalid value: %s' % s)
return 10 / n
foo1('0')
# 如果可以選擇python已有的內建的錯誤型別(比如valueerror,typeerror),盡量使用python內建的錯誤型別
# 捕獲錯誤目的只是記錄一下,便於後續追蹤。但是,由於當前函式不知道應該怎麼處理該錯誤,所以,最恰當的方式是繼續往上拋,讓頂層呼叫者去處理。
# # 除錯
# # print() 列印
# assert 斷言
# assert n != 0, 'n is zero!' 如果斷言失敗,assert語句本身就會丟擲assertionerror:
# logging
# 它允許你指定記錄資訊的級別,有debug,info,warning,error等幾個級別
# 新增配置logging.basicconfig(level=logging.info)
# logging.info()
# pdb
# 第4種方式是啟動python的偵錯程式pdb,讓程式以單步方式執行
# python -m pdb err.py
# pdb.set_trace()
# 這個方法也是用pdb,但是不需要單步執行,我們只需要import pdb,然後,在可能出錯的地方放乙個pdb.set_trace(),就可以設定乙個斷點:
#
Python錯誤與除錯
try catch語法 try pass except someerror as e pass except someerror as e pass finally pass日誌級別 critical error warning info debug notset import logging lo...
python學習筆記 基礎技能 除錯
1 除錯 利用pdb模組進行除錯,這種方式是在命令列下面進行除錯的。第一種方法是從命令列進入,進行.py檔案的執行,在執行時候新增以下引數 python m pdb 20140805.py 截圖如下所示 第二種是 比較常用的,就是在程式中間插入一段程式,import pdbpdb.set trace...
Python學習筆記 錯誤 除錯和測試
根據廖雪峰python教程整理 在程式執行過程中,總會遇到各種各樣的錯誤。有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為bug bug 是必須修復的。有的錯誤是使用者輸入造成的,比如讓使用者輸入email 位址,結果得到乙個空字串,這種錯誤可以通過檢查使用...