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