Python學習日記 Day13異常

2021-10-03 02:53:25 字數 4777 閱讀 3009

今天是2023年2月22日,晴,4~16℃

每當遇到python直譯器無法處理的錯誤時,都會建立乙個異常物件。若沒有對異常進行處理,則程式會停止執行,並顯示乙個 traceback 資訊;若編寫了處理異常的**,程式就能按**處理異常,並繼續執行。

1、try-except **塊

python中使用 try-except **塊來捕獲並處理異常。若try中的**塊能夠正常執行,則忽略except**塊中的內容;若try中**塊發生 except 可捕獲的異常,則忽略 try **塊中剩餘的**,並執行 except **塊的內容。例如:

a =5/

0#traceback:division by zero

對該語句使用 try-catch 進行處理:

try

: a =5/

0except zerodivisionerror:

print

("can't divide by zero!"

)#output:can't divide by zero!

在完成異常處理後,程式將繼續執行 try-catch **塊下面的內容。

2、else**塊

else **塊可以在 try 語句塊執行成功時執行對應的語句。

try

: a =5/

1except zerodivisionerror:

print

("can't divide by zero!"

)else

:print

("ok!"

)#output:ok!

3、使用異常處理避免程式崩潰

發生異常時,程式若不對異常進行處理,程式可能會崩潰,使工作未能儲存或完成,這會導致嚴重的後果。妥善的處理異常,避免程式因異常而崩潰就十分重要。

這裡使用昨天寫的計算圓面積的**:

'''計算圓的面積'''

filename =

"d:\pi.txt"

with

open

(filename)

as pi_file:

lines = pi_file.readlines(

)pi =

""for line in lines:

pi += line.strip(

)pi =

float

(pi)

radius =

float

(input

("請輸入圓的半徑:"))

area = radius **

2* pi

print

("圓的面積是:"

+str

(area)

)

若是檔案未能成功開啟,會引發 filenotfounderror ;若是輸入圓的半徑時存在非法字元,會引發 valueerror。

使用 try-catch **塊將這兩個部分做處理:

'''計算圓的面積'''

filename =

"d:\pi.txt"

try:

with

open

(filename)

as pi_file:

lines = pi_file.readlines(

)except filenotfounderror:

print

("未找到檔案!pi將使用3.14替代"

) pi =

3.14

else

: pi =

""for line in lines:

pi += line.strip(

) pi =

float

(pi)

while

true

:try

: radius =

float

(input

("請輸入圓的半徑:"))

except valueerror:

print

("請輸入正確的圓半徑!"

)else

: area = radius **

2* pi

print

("圓的面積是:"

+str

(area)

)break

;

由此,可以避免由於檔案缺失和輸入錯誤導致的程式崩潰。

4、異常處理的流程

try-except-else **塊的工作原理大致如下:python嘗試執行 try **塊中的**;僅在 try **塊成功執行時才需要執行的**應放在 else **塊中;except **塊給定了發生指定異常的處理方式。

1、split 方法

字串物件提供乙個 split 方法,它將返回乙個由字串中所有單詞組成的列表。

string =

"hello! nice \n to meet you, mr. brown!"

words = string.split(

)print

(words)

#output:['hello!', 'nice', 'to', 'meet', 'you,', 'mr.', 'brown!']

雖然得到的列表中的單詞有些包含了標點,但這種方法仍能較為準確地得到字串的單詞個數。

2、單檔案求單詞個數

filename = r"d:\alice.txt"

try:

with

open

(filename)

as file_object:

text = file_object.read(

)except filenotfounderror:

print

("sorry, there's no such file!"

)else

: words = text.split(

) words_num =

len(words)

print

("there're "

+str

(words_num)

+" words in the file!"

)#output:there're 26511 words in the file!

3、多檔案分析

接下來對多個檔案進行如上的詞數分析操作。首先,將上面的**寫入乙個函式中。

def

get_words_num

(filename)

:'''若檔案存在,返回檔案中詞數;否則返回false'''

try:

with

open

(filename)

as file_object:

text = file_object.read(

)except filenotfounderror:

return

false

#或者用return 0?python的函式不需要指定和統一返回型別,我就寫返回false了。不知這是否符合規範?

else

: words = text.split(

) words_num =

len(words)

return words_num

在主程式中,利用迴圈可多次呼叫該函式。

while

true

: filename =

input

("請輸入需要求詞數檔案的路徑與檔名(包含字尾名)。\n若想退出,請輸入q。\n"

)if filename.lower()==

'q':

print()

break

;else

: result = get_words_num(filename)

if result ==

false

:print

("抱歉,未找到檔案!"

)else

:print

("該檔案共有"

+str

(result)

+"個單詞!"

)'''

test:

請輸入需要求詞數檔案的路徑與檔名(包含字尾名)。

若想退出,請輸入q。

d:/alice.txt

該檔案共有26511個單詞!

請輸入需要求詞數檔案的路徑與檔名(包含字尾名)。

若想退出,請輸入q。

d:/ecila.txt

抱歉,未找到檔案!

請輸入需要求詞數檔案的路徑與檔名(包含字尾名)。

若想退出,請輸入q。

q'''

4、不進行處理:pass 語句

pass 語句可作為乙個不做操作的佔位語句,類似於其他語言中 {} 的空**塊。不需要對異常做任何操作時,可以使用它。

try

: a =5/

0except zerodivisionerror:

pass

#無任何輸出

此外,pass 語句還可充當佔位符。它可以提醒你在程式的這個位置沒有任何操作。當未想好這部分的內容,但需要測試其它部分是否正常執行時,也可以使用它。

學習日記Day13 作業

請解釋說明802.1q tag欄位的長度以及字段作用?答 長度為4bytes,字段作用見下表 字段 作用tpid 長度為2位元組,表示幀型別。取值為0x8100 33024 時表示802.1q tag幀。如果不支援802.1q的裝置收到這樣的幀,會將其丟棄。pripriority,長度為3位元,表示...

前端學習Day13

一.如果考慮相容最小高度的設定 了解 1.正常專案中 最小高度直接用min height即可。如果考慮相容 min height 在ie6不相容,ie6預設把height解析成最小高度。注 如果height 和 min height同是出現,執行height固定高度。2.最小高度的相容設定方法 了解...

DAY13學習筆記

疊加多個裝飾器 當乙個被裝飾的物件同時疊加多個裝飾器時 裝飾器的載入順序是 自下而上。迭代器 什麼是迭代器 迭代指的是乙個重複的過程,每一次重複都是基於上一次的結果而來的。迭代器指的是迭代取值的工具,該工具的特點是可以不依賴於索引取值。為何要用迭代器 為了找出一種通用的 可以不依賴於索引的迭代取值方...