上一次是針對錯誤和異常,今天從else和with語句對其進行補充
乙個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有乙個分支會被執行。
處理程式將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程式中的異常。乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個元組,最後乙個except子句可以忽略異常的名稱,它將被當作萬用字元使用。你可以使用這種方法列印乙個錯誤資訊,然後再次把異常丟擲。
for arg in sys.ar**[1:
]:try:
f =open
(arg,
'r')
except ioerror:
print
('cannot open'
, arg)
else
:print
(arg,
'has'
,len
(f.readlines())
,'lines'
) f.close(
)
使用 else 子句比把所有的語句都放在 try 子句裡面要好,這樣可以避免一些意想不到的、而except又沒有捕獲的異常。
異常處理並不僅僅處理那些直接發生在try子句中的異常,而且還能處理子句中呼叫的函式(甚至間接呼叫的函式)裡丟擲的異常。例如
>>
>
def this_fails():
x =1/
0>>
>
try:
this_fails(
)except zerodivisionerror as err:
print
('handling run-time error:'
, err)
handling run-time error:
int division or modulo by zero
預定義的清理行為
一些物件定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那麼這個標準的清理行為就會執行。
這面這個例子展示了嘗試開啟乙個檔案,然後把內容列印到螢幕上
for line in
open
("myfile.txt"):
print
(line, end=
"")
以上這段**的問題是,當執行完畢後,檔案會保持開啟狀態,並沒有被關閉。
with
open
("myfile.txt"
)as f:
for line in f:
print
(line, end=
"")
以上這段**執行完畢後,就算在處理過程**問題了,檔案 f 總是會關閉。
temp = os.
open
('test_text.txt'
, os.o_rdwr | os.o_creat)
temp_file = os.fdopen(temp,
'r')
print
(str
(temp_file.read())
)os.close(temp)
就可以簡化成:
with
open
('test_text.txt'
,'r'
)as f:
print
(f.read(
))
Python學習筆記9 else與with語句
i 1while i 5 print i i 1else print i,5 1 2345 6 5i 1for i in range 1 11 print i else print else i 123 4567 8910else 10press any key to continue.def tr...
Python 中的迴圈與 else
python 中的迴圈與 else 有以下兩種形式 python中的 for while 迴圈都有乙個可選 optional 的 else 分支 類似 if語句和 try 語句那樣 在迴圈迭代正常完成之後執行。所謂迴圈迭代正常完成,一般是指 所需要迭代處理的物件遍歷完畢,且中間沒有異常發生 注 縱然...
python中else與with語句(day9)
else語句 if else語句 wwe input sname if wwe.endswith wawa print wwwe,wawa else print wwe,nono while else語句 如有break,直接跳出,不執行else語句 count 0while count 5 pri...