Python的異常處理(二)

處理多個異常

處理多個異常花枫,并不是同時報(bào)出多個異常刻盐。程序運(yùn)行時,只要遇到一個異常劳翰,就會有所反應(yīng)敦锌。所以,每次捕獲到的異常佳簸,一定是一個乙墙。所以,所謂的處理多個異常,意思是說容許捕獲不同的異常听想,在不同的except子句中處理腥刹。
形式如下:

try:
        print "try子句"
    except xxx:
        print "異常xxx"
    except yyy:
        print "異常yyy"

例子:

#!usr/bin/env Python
# coding=utf-8
while 1:
    print "this is a division program."
    c = raw_input("input 'c' continue,otherwise logot:")
    if c == 'c':
        a = raw_input("first number:")
        b = raw_input("second number:")
        try:
            print float(a)/float(b)
        except ZeroDivisionError:
            print "the second number can't be zero"
            print "************************"
        except ValueError:
            print "please input number"
            print "************************"
    else:
        break 

與上一篇的例子相比,多了一個異常捕獲汉买。當(dāng)輸入的分母不是數(shù)字時衔峰,可以捕獲該異常。測試如下:

$ python tryExcept1.py
this is a division program.
input 'c' continue,otherwise logot:c
first number:3
second number:a
please input number
************************
this is a division program.
input 'c' continue,otherwise logot:c
first number:3
second number:0
the second number can't be zero
************************
this is a division program.
input 'c' continue,otherwise logot:c
first number:5
second number:2
2.5
this is a division program.
input 'c' continue,otherwise logot:p
$

除了使用多個except之外蛙粘,還可以在一個except后面放多個異常參數(shù)垫卤,可以將except部分修改為如下:

except (ZeroDivisionError,ValueError):
    print "please input rightly"
    print "*********************"

運(yùn)行結(jié)果:

$ python tryExcept1.py
this is a division program.
input 'c' continue,otherwise logot:c
first number:2
second number:a
please input rightly
*********************
this is a division program.
input 'c' continue,otherwise logot:c
first number:3
second number:0
please input rightly
*********************
this is a division program.
input 'c' continue,otherwise logot:c
first number:4
second number:2
2.0
this is a division program.
input 'c' continue,otherwise logot:d
mobao:PythonExample mobao$ 

特別注意,一個except组题,多個異常參數(shù)時葫男,異常參數(shù)需要放進(jìn)()中。

如果需要呈現(xiàn)內(nèi)置的異常信息崔列,則可做如下更改:

except (ZeroDivisionError,ValueError), e:
    print e
    print "*********************"

在Python3中梢褐,則如下:

except (ZeroDivisionError,ValueError) as e:
    print e
    print "*********************"

運(yùn)行效果:

python tryExcept1.py
this is a division program.
input 'c' continue,otherwise logot:c
first number:2
second number:a
could not convert string to float: a
*********************
this is a division program.
input 'c' continue,otherwise logot:c
first number:2
second number:0
float division by zero
*********************
this is a division program.

"could not convert string to float: a"和"float division by zero"皆為內(nèi)置異常信息。

以上的寫法赵讯,處理了兩個異常盈咳,如果是不止兩個異常呢?可以這樣:execpt: 或者 except Exception, e边翼,后面什么參數(shù)也不寫就好了鱼响。

else子句

一般try...except...,在一般情況下是夠用的组底。但是總有不一般的時候出現(xiàn)丈积,所以增加了一個else子句。如:

>>> try:
...     print "I am try"
... except:
...     print "I am except"
... else:
...     print "I am else"
... 
I am try
I am else

可以看出债鸡,如果執(zhí)行了try江滨,則except()子句會被直接忽略,else子句會被執(zhí)行厌均。

>>> try:
...     print 1/0
... except:
...     print "I am except"
... else:
...     print "I am else"
... 
I am except

如果執(zhí)行了except子句唬滑,則不執(zhí)行else中的文件。
例如:

#!usr/bin/env Python
# coding=utf-8
while 1:
    try:
        a = raw_input("first number:")
        b = raw_input("second number:")
        print float(a)/float(b)
    except Exception, e:
        print e
        print "try again"
    else:
        break 

結(jié)果如下:

$ python tryExcept1.py
first number:2
second number:a
could not convert string to float: a
try again
first number:3
second number:0
float division by zero
try again
first number:5
second number:2
2.5
$

finally

無論try子句執(zhí)行還是except子句執(zhí)行棺弊,finally中一定執(zhí)行晶密。

>>> x = 10
>>> try:
...     x = 2/1
... except Exception,e:
...     print e
... finally:
...     print "del x"
...     del x
... 
del x
>>> x = 10
>>> try:
...     x = 1/0
... except Exception,e:
...     print e
... finally:
...     print "del x"
...     del x
... 
integer division or modulo by zero
del x

當(dāng)然,在應(yīng)用中模她,可以將上面的各個子句都綜合起來使用稻艰,寫成如下樣式:

try:
    do something
except:
    do something
else:
    do something
finally
    do something
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侈净,隨后出現(xiàn)的幾起案子连锯,更是在濱河造成了極大的恐慌归苍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运怖,死亡現(xiàn)場離奇詭異拼弃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摇展,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門吻氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咏连,你說我怎么就攤上這事盯孙。” “怎么了祟滴?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵秦效,是天一觀的道長哩掺。 經(jīng)常有香客問我忱详,道長拟赊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任草慧,我火速辦了婚禮桶蛔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漫谷。我一直安慰自己仔雷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布舔示。 她就那樣靜靜地躺著碟婆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惕稻。 梳的紋絲不亂的頭發(fā)上竖共,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音缩宜,去河邊找鬼肘迎。 笑死甥温,一個胖子當(dāng)著我的面吹牛锻煌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姻蚓,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宋梧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狰挡?” 一聲冷哼從身側(cè)響起捂龄,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤释涛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倦沧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唇撬,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年展融,在試婚紗的時候發(fā)現(xiàn)自己被綠了窖认。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡告希,死狀恐怖扑浸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燕偶,我是刑警寧澤喝噪,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站指么,受9級特大地震影響酝惧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涧尿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一系奉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姑廉,春花似錦缺亮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至号阿,卻和暖如春并鸵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扔涧。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工园担, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枯夜。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓弯汰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湖雹。 傳聞我的和親對象是個殘疾皇子咏闪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容