Python異常

寫(xiě)在前面

在任何編程語(yǔ)言中都難免會(huì)遇到異常(報(bào)錯(cuò))始苇,如何查看報(bào)錯(cuò)砌烁、理解報(bào)錯(cuò)、避免報(bào)錯(cuò)催式、捕獲報(bào)錯(cuò)信息函喉,都是我們需要去應(yīng)對(duì)的環(huán)節(jié)。

一荣月、異常定義

異常:當(dāng)程序檢測(cè)到錯(cuò)誤時(shí)管呵,Python解釋器就無(wú)法繼續(xù)執(zhí)行了,此時(shí)會(huì)出現(xiàn)一些錯(cuò)誤的提示哺窄,這就是所謂的”異尘柘拢”账锹,也就是我們常說(shuō)的BUG
例如最常見(jiàn)的bug坷襟,打錯(cuò)函數(shù)名稱:

pring("Biomamba")
# 這時(shí)就會(huì)返回報(bào)錯(cuò)奸柬,并告訴發(fā)生錯(cuò)誤的位置和具體原因

NameError: name ‘pring’ is not defined

二、異常捕獲

程序遇到bug時(shí)會(huì)存在兩種情況:1婴程、終止程序廓奕。2、提醒出現(xiàn)的bug并讓整個(gè)程序繼續(xù)運(yùn)行档叔。情況2就需要進(jìn)行異常捕獲桌粉,從而防止整個(gè)程序因?yàn)橐恍┬ug而停止運(yùn)行
異常捕獲基本語(yǔ)法:
try:
可能錯(cuò)誤發(fā)生的代碼 except:
如果出現(xiàn)異常則執(zhí)行的代碼

# 捕獲異常(默認(rèn)不區(qū)分異常類型):
try:
    prinf('這條代碼可能有異常')
except:
    print("上條代碼有異常,本條被輸出")
# 可以看到以上幾行代碼沒(méi)有報(bào)錯(cuò)衙四,輸出的內(nèi)容則是except后的語(yǔ)句
## 上條代碼有異常铃肯,本條被輸出
# 捕獲指定異常
# 例如這里捕獲變量名稱未定義的異常"NameError"
try:
    print(Biomamba)
except NameError as aerror:
    print("Biomamba未被定義")
# 可以看到錯(cuò)誤成功被捕獲,且備選方案被執(zhí)行
## Biomamba未被定義
# 捕獲指定異常
# 這里我們讓異常不屬于NameError:
try:
    print(1/0)
except NameError :
    print("Biomamba未被定義")
# 可以看到錯(cuò)誤沒(méi)有被捕獲届搁,提示信息被輸出缘薛,備選代碼也沒(méi)有被執(zhí)行

ZeroDivisionError: division by zero

# 捕獲多個(gè)異常,except(異常1,異常2)
try:
    print(1/0)
except(NameError,ZeroDivisionError):
     print("這是備選代碼執(zhí)行結(jié)果")
# 可以看出備選代碼被成功執(zhí)行
## 這是備選代碼執(zhí)行結(jié)果
# 捕獲所有類型異常
try:
    print(1/0)
    print(Biomamba)
except Exception:
     print("這是備選代碼執(zhí)行結(jié)果")
# 可以看出備選代碼被成功執(zhí)行
## 這是備選代碼執(zhí)行結(jié)果

三卡睦、異常else

除了except之外宴胧,還可以設(shè)置沒(méi)有異常時(shí)選擇執(zhí)行的代碼:

try:
    print("這里沒(méi)有異常")
except:
    print("這是有異常后的執(zhí)行結(jié)果")
else:
    print("這是沒(méi)有捕獲到異常的執(zhí)行結(jié)果")
# 大家可以體會(huì)一下上述幾行代碼的執(zhí)行邏輯
## 這里沒(méi)有異常
## 這是沒(méi)有捕獲到異常的執(zhí)行結(jié)果

四、異常finally

不管有沒(méi)有異常表锻,finally所包含的語(yǔ)句均會(huì)被執(zhí)行:

# 有異常
try:
    1/0
    print("這里沒(méi)有異常")
except:
    print("這是有異常后的執(zhí)行結(jié)果")
else:
    print("這是沒(méi)有捕獲到異常的執(zhí)行結(jié)果")
finally:
    print("我在所有條件下都會(huì)被執(zhí)行")
# 大家可以體會(huì)一下上述幾行代碼的執(zhí)行邏輯
## 這是有異常后的執(zhí)行結(jié)果
## 我在所有條件下都會(huì)被執(zhí)行
# 無(wú)異常
try:
    1+1
    print("這里沒(méi)有異常")
except:
    print("這是有異常后的執(zhí)行結(jié)果")
else:
    print("這是沒(méi)有捕獲到異常的執(zhí)行結(jié)果")
finally:
    print("我在所有條件下都會(huì)被執(zhí)行")
# 大家可以體會(huì)一下上述幾行代碼的執(zhí)行邏輯
## 2
## 這里沒(méi)有異常
## 這是沒(méi)有捕獲到異常的執(zhí)行結(jié)果
## 我在所有條件下都會(huì)被執(zhí)行

五恕齐、異常傳遞

異常是具有傳遞性的,可以用as來(lái)定義接收異常的變量:

try:
    1/0
except Exception as my_error:
    print("異常被成功捕獲瞬逊,下面是異常的具體信息:\n")
    print(my_error)
    # 可以看到除數(shù)異常被成功捕獲
## 異常被成功捕獲显歧,下面是異常的具體信息:
## 
## division by zero
# 但異常的捕獲是一個(gè)局部變量,跳出異常捕獲語(yǔ)句后捕獲的異常變量就失效了:
try:
    1/0
except Exception as my_error:
    print("異常被成功捕獲确镊,下面是異常的具體信息:\n")

print(my_error)
    # 可以看到除數(shù)異常被成功捕獲士骤,但my_error變量不存在
NameError: name ‘my_error’ is not defined

NameError: name ‘my_error’ is not defined

往期回顧

生信Python速查手冊(cè)

Python安裝(Windows+Linux)

Python的"Rstudio"——Pycharm

碼Python神器:jupyter notebook

一文了解Python基礎(chǔ):字面量、注釋蕾域、變量拷肌、類型、運(yùn)算符

Python判斷語(yǔ)句

Python循環(huán)語(yǔ)句

Python函數(shù)與方法

一文掌握Python數(shù)據(jù)容器

Python函數(shù)進(jìn)階

Python文件操作

如何聯(lián)系我們

公眾號(hào)后臺(tái)消息更新不及時(shí)旨巷,超過(guò)48h便不允許回復(fù)讀者消息巨缘,這里給大家留一下領(lǐng)取資料、免費(fèi)服務(wù)器(有root權(quán)限的共享服務(wù)器,注冊(cè)即送200¥)的微信號(hào)[Biomamba]采呐,方便各位隨時(shí)交流若锁、提建議(科研任務(wù)繁重,回復(fù)不及時(shí)請(qǐng)見(jiàn)諒)斧吐。此外呼聲一直很高的交流群也建好了又固,歡迎大家入群討論:永久免費(fèi)的千人生信仲器、科研交流群

大家可以閱讀完這幾篇之后添加
給生信入門初學(xué)者的小貼士
如何搜索公眾號(hào)過(guò)往發(fā)布內(nèi)容

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仰冠,隨后出現(xiàn)的幾起案子娄周,更是在濱河造成了極大的恐慌,老刑警劉巖沪停,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裳涛,居然都是意外死亡木张,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門端三,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舷礼,“玉大人,你說(shuō)我怎么就攤上這事郊闯∑尴祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵团赁,是天一觀的道長(zhǎng)育拨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)欢摄,這世上最難降的妖魔是什么熬丧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮怀挠,結(jié)果婚禮上析蝴,老公的妹妹穿的比我還像新娘。我一直安慰自己绿淋,他們只是感情好闷畸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吞滞,像睡著了一般佑菩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冯吓,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天倘待,我揣著相機(jī)與錄音,去河邊找鬼组贺。 笑死凸舵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的失尖。 我是一名探鬼主播啊奄,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渐苏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了菇夸?” 一聲冷哼從身側(cè)響起琼富,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庄新,沒(méi)想到半個(gè)月后鞠眉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡择诈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年械蹋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞芍。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哗戈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荷科,到底是詐尸還是另有隱情唯咬,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布畏浆,位于F島的核電站胆胰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏全度。R本人自食惡果不足惜煮剧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望将鸵。 院中可真熱鬧勉盅,春花似錦、人聲如沸顶掉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痒筒。三九已至宰闰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簿透,已是汗流浹背移袍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留老充,地道東北人葡盗。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像啡浊,于是被迫代替她去往敵國(guó)和親觅够。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胶背,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 寫(xiě)在前面 ECharts是百度開(kāi)源的純 Javascript 圖表庫(kù),目前開(kāi)源可以與highcharts相匹敵的一...
    Biomamba生信基地閱讀 139評(píng)論 0 0
  • 一喘先、模塊定義 Module钳吟,是一個(gè)Python文件,以.py結(jié)尾窘拯,模塊能定義函數(shù)红且、類、變量涤姊、可執(zhí)行代碼直焙。pytho...
    Biomamba生信基地閱讀 50評(píng)論 0 0
  • 寫(xiě)在前面 函數(shù)是組織好的、可重復(fù)使用的砂轻,用來(lái)實(shí)現(xiàn)特定功能的代碼段。通過(guò)函數(shù)的定義與使用能夠提高代碼的復(fù)用性斤吐、減少重...
    Biomamba生信基地閱讀 54評(píng)論 0 0
  • 寫(xiě)在前面 無(wú)論是哪種編程語(yǔ)言搔涝,搬磚的目的都是為了將處理后的數(shù)據(jù)能夠?qū)С龉┖罄m(xù)使用。Python的文件操作邏輯與R語(yǔ)...
    Biomamba生信基地閱讀 98評(píng)論 0 1
  • 寫(xiě)在前面 關(guān)于線程的內(nèi)容我們此前在R語(yǔ)言中給大家介紹過(guò):調(diào)用的線程越多就算的越快嘛[http://mp.weixi...
    Biomamba生信基地閱讀 48評(píng)論 0 0