第10章 錯誤和異常 1

2021-05-29 22:16:38 字數 2733 閱讀 2904

10.1 什麼是異常

10.1.1 錯誤

從軟體方面來說,錯誤是語法或是邏輯上的。語法錯誤指示軟體結構上有錯誤,導致不能被直譯器解釋或編譯器編譯。這些錯誤必須在程式執行前糾正。

邏輯錯誤可能是由於不完整或是不合法的輸入所致;在其他情況下,還可能是邏輯無法生成、計算、或是輸出結果需要的過程無法執行。這些錯誤分別被稱為域錯誤或範圍錯誤。

10.1.2 異常

異常是因為程式出現了錯誤而在正常控制流以外採取的行為。這個行為又分為兩個階段:首先是引起異常發生的錯誤,然後是檢測(和採取可能的措施)階段。

10.2 python中的異常

nameerror zerodivisionerror syntaxerrror indexerror keyerror attributeerror

syntaxerror異常是唯一不是在執行時發生的異常。它代表python**中有乙個不正確的結構,在它改正之前程式無法執行。這些錯誤一般都是在編譯時發生。

10.3 檢測和處理異常

乙個try語句可以對應乙個或多個except子句,但只能對應乙個finally子句,或是乙個try-except-finally復合語句。

可以使用try-except語句檢測和處理異常,也可以新增乙個可選的else子句處理沒有探測到異常的執行的**。而try-finally只允許檢測異常並做一些必要的清理工作,沒有任何異常處理設施。

10.3.1 try-except語句

try語句塊中異常發生點後的剩餘語句永遠不會到達,所以也永遠不會執行。

>>> try:

... f = open("c:\\asdas")

... except ioerror, e:

... print 'could not open file:', e

...

could not open file: [errno 2] no such file or directory: 'c:\\asdas'

>>> 

10.3.2 包裝內建函式

>>> def safe_float(obj):

... try:

... return float(obj)

... except valueerror, e:

... print "this is an invalid value..."

... return none

...

>>> `safe_float("ads")`

this is an invalid value...

'none'

>>> `safe_float("123")`

'123.0'

>>> 

10.3.3 帶有多個except的try語句

>>> def safe_float1(obj):

... try:

... return float(obj)

... except valueerror, e:

... print "value was invalid..."

... return none

... except typeerror, e:

... print "type was invalid..."

... return none

...

>>> `safe_float1("ad")`

value was invalid...

'none'

>>> `safe_float1(())`

type was invalid...

'none'

>>> 

10.3.4 處理多個異常的except語句

還可以在乙個except子句裡處理多個異常,except語句在處理多個異常時要求異常被放在乙個元組裡。

>>> def safe_float2(obj):

... try:

... return float(obj)

... except (typeerror, nameerror, valueerror), e:

... print "error: ",e

... return none

...

>>> `safe_float2('asd')`

error:  could not convert string to float: asd

'none'

>>> 

10.3.5 捕獲所有異常

baseexception是所有異常之母。

>>> def safe_float3(obj):

... try:

... return float(obj)

... except typeerror, e:

... print "typeerror: ", e

... return none

... except baseexception, e:

... print "error: ", e

... return none

...

>>> `safe_float3("asd")`

error:  could not convert string to float: asd

'none'

>>> `safe_float3(())`

typeerror:  float() argument must be a string or a number

'none'

>>> 

第10章 檔案和異常 10 2 寫入檔案

li hongliang 2020年08月12日 10.2 寫入檔案 儲存資料的最簡單的方式之一是將其寫入到檔案中。通過將輸出寫入檔案,即便關閉包含程式輸出的終端視窗,這些輸出也依然存在 你可以在程式結束執行後檢視這些輸出,可與別人分享輸出檔案,還可編寫程式來將這些輸出讀取到記憶體中並進行處理。要讓...

python錯誤和異常(1)

1 syntaxerror python直譯器語法錯誤,是唯一不是在執行時發生的異常。2 檢測和處理異常 try語句有兩種主要形式 try except 和 try finally.只能二選一。乙個try語句可以對應乙個或多個except子句,但只能對應乙個finally子句。try語句塊中異常發生...

第10章 關聯容器 1

關聯容器和順序容器的本質差別在於 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。關聯容器 associative container 支援通過鍵來高效地查詢和讀取元素。map的元素以鍵 值 key value 對的形式組織 鍵用作元素在map中的索引,...