while、for、try except語句中的else

if?condition:
????doSomeThings
else:
????doAnthorThings
if?condition1:
????do1
elif?condition2:
????do2
else:
????doOtherThings
一、for,while循環(huán)中的else
ls?=?[1,?3,?5,?7,?9]
allOdd?=?True
for?i?in?ls:
????if?i?%?2?==?0:
????????allOdd?=?False
????????break
if?allOdd:
????print('list?ls?%r?constructed?by?only?odd?number'?%?ls)
else:
????print('list?ls?%r?**?is\'t?**?constructed?by?only?odd?number'?%?ls)
for?i?in?ls:
????if?i?%2?==?0:
????????print('list?ls?%r?**?is\'t?**?constructed?by?only?odd?number'?%?ls)
????????break
else:
????print('list?ls?%r?constructed?by?only?odd?number'?%?ls)
二、try異常處理語句中的else
try:
????result?=?a/b
????print(result)
except?TypeError:
????print('輸入數(shù)字')
except?ZeroDivisionError:
????print('被除數(shù)不能為零')
try:
????result?=?a/b
except?TypeError:
????print('輸入數(shù)字')
except?ZeroDivisionError:
????print('被除數(shù)不能為零')
else:?
????print('計算結(jié)果%r'%result)
try ? ? ? 可能拋出異常的語句。 except ? ?捕獲異常,處理異常。 else ? ? ?無異常,明確得知try語句中無異常。而不是這兩種情況:有異常;有異常但處理了。 finally ? 有或無異常,都執(zhí)行的語句,一般為關(guān)閉、清理工作。
三、簡單總結(jié)
for while循環(huán)中,else用于循環(huán)正常結(jié)束,且循環(huán)體中沒有break、return或異常拋出,則執(zhí)行else語句塊中的內(nèi)容。
try except異常捕獲處理語句中,else是定義用于沒有異常出現(xiàn)時執(zhí)行的部分。
不同于if else 語句,以上兩種else用法看起來有些復(fù)雜。簡單理解,可以把else語句塊當(dāng)做語句主體中“沒有幺蛾子“時執(zhí)行的語句塊。這樣就可以簡單理解了else的兩種用法了。
許多人反對在此處復(fù)用else關(guān)鍵字來表達(dá)除外情況,認(rèn)為then關(guān)鍵字或許更好(luciano ramalho《fluent python》),更甚者主張遵循“最小驚訝原則”,即在for和while語境里不要用else關(guān)鍵字,以免它給人帶來疑惑(Brett Slatkin《Effective Python》)。筆者認(rèn)為,如果把兩處else統(tǒng)一理解為“沒有出現(xiàn)問題,沒有幺蛾子”,那么此時的else語法會變成一個很有用的技巧。
作者:鞏慶奎,大奎,對計算機(jī)、電子信息工程感興趣。gongqingkui at 126.com
贊 賞 作 者

更多閱讀
特別推薦

點(diǎn)擊下方閱讀原文加入社區(qū)會員
評論
圖片
表情
