python日誌和異常

2022-05-03 04:12:08 字數 4569 閱讀 8897

「日誌」**:

"異常"**:

2.異常

try捕獲由python或程式本身引發的異常

raise

手工地引發乙個異常

為什麼要使用異常

錯誤處理,當python檢查以程式執行時的錯誤就引發異常,你可以在程式裡捕捉和處理這些錯誤,或者忽略它們。

事件通知,異常也可以作為某種條件的訊號,而不需要在程式裡傳送結果標誌或顯式地測試它們。

特殊情形處理,有時有些情況是很少發生的,把相應的處理**改為異常處理會更好一些。

奇特的控制流,異常是乙個高層次的"goto",可以把它作為實現奇特的控制流的基礎。如反向跟蹤等。

異常的基礎知識

python的try語句有兩種風格---一種是處理異常(try/except/else),一種是無論是否發生異常都將執行最後的**(try/finally)。

try/except/else風格

try:

《語句》#執行別的**

except《名字》:

《語句》#如果在try部份引發了'name'異常

except《名字》,《資料》:

《語句》#如果引發了'name'異常,獲得附加的資料

else:

《語句》#如果沒有異常發生

try的工作原理是,當開始乙個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。

如果當try後的語句執行時發生異常,python就跳回到try並執行第乙個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。

如果在try後的語句裡發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程式的最上層(這樣將結束程式,並列印預設的出錯資訊)。

如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。

try/finally風格

try:

《語句》

finally:

《語句》#退出try時總會執行

raise

python總會執行finally子句,無論try子句執行時是否發一異常。

當你想無論是否發生異常都確保執行某些**時,try/finally是有用的。

要引發異常,你需要寫raise語句,它的形式很簡單,raise後面跟著要引發的異常。

raise#手工地引發異常

raise,#傳遞乙個附加的資料

什麼是異常名(name)呢?它也許是內建作用域內的內建異常(如indexerror),或者是你程式中的任意字串物件。

預設行為:顯示錯誤資訊。

$ python test.py

traceback (innermost last):

file"test.py", line3,in?

a=1/0

zerodivisionerror: integer divisionormodulo

當乙個未捕獲的異常發生時,python將結束程式並列印乙個堆疊跟蹤資訊,以及異常名和附加資訊。

用try捕獲內建異常

如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。

#!/usr/bin/python

try:

a=1/0

printa

except:

print'i get the error'

當程式執行是會捕獲乙個錯誤並執行except後面的**。

異常並不總是壞事情,例如,檔案物件的read方法在檔案尾時返回乙個空串,python也提供乙個內建函式raw_input,它從標準輸入流讀入。與read方法不同,當遇到檔案尾時,raw_input()引發內建的eoferror錯誤。所以可以這樣用:

while1:

try:

line=raw_input()#從stdin讀入行

excepteoferror:

break#在檔案末尾退出迴圈

esle:

# 其它處理**

用異常傳遞成功的訊號

found='item found'

defsearch():

引發或返回found

try:

search()

exceptfound:

successful

else:

fail

可以使用try來除錯**,你可以用自已的異常處理替換python預設的異常處理。把整個程式封裝在乙個外部try裡面,你可以捕獲執行時的任何異常。

try語句子句形式表

except:            捕獲所有異常

exceptname:        只捕獲特定的異常

exceptname,value:    捕獲異常和它的附加資料

except(name1,name2):    捕獲任何列出的異常

else:            如果沒有異常

finally:        總是執行

捕獲多個異常中的乙個,python從上到下地檢視except子句,括號裡列出多個異常與列出單獨的異常是一樣的,只是更簡潔一些。

執行時巢狀的異常,python會匹配最近的except。

finally子句無論如何都會執行,所以它是做清除動作的好地方,如關閉乙個檔案的操作。

捕捉所有異常

try:

# 你的**

exceptbaseexception, e:

print(str(e))

總結:寫日誌和異常在寫**時是乙個非常好的習慣,有助於你在編寫大專案或者邏輯複雜的工程時找出問題!

Python 異常和日誌

一 異常 1 異常 異常通常可以看做是程式的錯誤,代表程式是有缺陷的。異常型別 異常 描述 baseexception 所有異常的基類 systemexit 直譯器請求退出 exception 常規錯誤的基類 stopiteration 迭代器沒有更多的值 generatorexit 生成器 gen...

python日誌和異常

異常 try except異常型別,捕獲異常 處理異常 也可以巢狀 除了。except exception as xx 未知錯誤。如果之前的都沒有,就抓所有 else 沒有錯誤 可以寫入多個except 捕獲異常 except 異常型別 as xx 具體的異常資訊物件 執行了乙個異常後不會繼續執行下...

異常和日誌

class excption exception 自定義異常類 pass try input 請輸入性別 if 男 and 女 raise exception 性別只能是男或女 except excption as ex print ex except exception as ex print e...