在程式執行的過程中,如果發生了錯誤,可以用try…except…finally…的錯誤處理機制,判斷是否有錯,以及找到出錯的原因。
try
...except: division by zero
finally
...end
當我們認為某些**可能會出錯時,就可以用try來執行這段**,如果執行出錯,則後續**不會繼續執行,而是直接跳轉至錯誤處理**,即except語句塊,執行完except後,如果有finally語句塊,則執行finally語句塊,至此,執行完畢。
python的錯誤其實也是class,所有的錯誤型別都繼承自baseexception,所以在使用except時需要注意的是父類和子類同時存在時,子類不會捕獲錯誤。下面因為unicodeerror是valueerror的子類所以不會捕獲到錯誤。
try
:foo()
except valueerror as e:
print
('valueerror'
) except unicodeerror as e:
print
('unicodeerror'
)
呼叫棧
如果錯誤沒有**獲,它就會一直往上拋,最後被python直譯器捕獲,列印乙個錯誤資訊,如下是錯誤資訊
traceback
(most recent call last)
: file "err.py"
, line 11,in
main()
file "err.py"
, line 9
,in main
bar('0'
) zerodivisionerror: division by zero
第乙個錯誤表示 11行呼叫main方法出錯,第二個錯誤表示呼叫bar(『0』)出錯了
記錄錯誤
python內建的logging模組可以非常容易地記錄錯誤資訊,程式列印完錯誤資訊後會繼續執行,並正常退出,通過配置,logging還可以把錯誤記錄到日誌檔案裡,方便事後排查。
import logging
def foo
(s):
return10/
int(s)
def bar
(s):
return
foo(s)*2
def main()
:try
:bar
('0'
) except exception as e:
logging.
exception
(e)main()
print
('end'
)
丟擲錯誤
用raise語句丟擲乙個錯誤的例項
class
fooerror
(valueerror)
: pass
def foo
(s):
n =int(s)
if n==0:
raise fooerror
('invalid value: %s'
% s)
return
10/ n
foo('0'
)
python學習筆記8
主要講了python的輸入和輸出 python通過 python2.x raw input和 python3.x input來實現輸入輸出。input可以加引數,表示為提示符,返回值為你的輸入。比如 age input how old are you?print your age is s age ...
Python學習筆記8(類)
8.1 建立和使用類 class dog def init self,name,age 初始化屬性name和age self.name name self.age age defsit self 模擬小狗被命令石蹲下 print self.name is now sitting def roll s...
Python學習筆記8 語句
條件語句 有的程式裡寫的是 usr bin python,表示 python 直譯器在 usr bin 裡面。但是,如果寫成 usr bin env,則表示要通過系統搜尋路徑尋找 python 直譯器。不同系統,可 能直譯器的位置不同,所以這種方式能夠讓 更將擁有可移植性。usr bin env p...