真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python異常處理(25)

在python開發(fā)中,代碼書寫時(shí)難免有疏忽或者意向不到的bug,導(dǎo)致程序run的過程中有可能會(huì)直接崩潰;然后對(duì)于程序猿而言,程序因bug崩潰是家常便飯,為了增加程序的健壯性,防止程序崩潰,我們可以對(duì)程序的有可能發(fā)生崩潰的代碼增加異常處理,以達(dá)到程序穩(wěn)健運(yùn)行的目的。

成都創(chuàng)新互聯(lián)專注于彌渡網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供彌渡營(yíng)銷型網(wǎng)站建設(shè),彌渡網(wǎng)站制作、彌渡網(wǎng)頁(yè)設(shè)計(jì)、彌渡網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造彌渡網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供彌渡網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

python 異常處理(25)

?

一.異常的概念

一般情況,python無(wú)法正常處理程序時(shí),就是會(huì)產(chǎn)生異常,舉個(gè)例子:

1.大家都知道分母不能為0,如果分母為0,程序必然崩潰;

1

2

3

x=3/0

?

程序崩潰/報(bào)錯(cuò):ZeroDivisionError:divisionbyzero

?

2.假如 python文件讀寫 中,我們講解了文件的讀寫操作,如果我們對(duì)一個(gè)不存在的文件讀取內(nèi)容,程序必然也會(huì)崩潰;

1

2

3

4

# 讀取123.txt文件,實(shí)際上該文件并不存在

fp=open("123.txt","r")

?

程序崩潰/報(bào)錯(cuò):FileNotFoundError:[Errno2]Nosuchfileordirectory:'123.txt'

?

對(duì)于以上的各種異常情況,我們可以通過?try…except…解決,那么具體有哪些異常能捕獲呢?如下所示:

1.BaseException?— 所有異常的基類

2.SystemExit?— 解釋器請(qǐng)求退出

3.KeyboardInterrupt?— 用戶中斷執(zhí)行(通常是輸入^C)

4.Exception?— 常規(guī)錯(cuò)誤的基類

5.StopIteration?— 迭代器沒有更多的值

6.GeneratorExit?— 生成器(generator)發(fā)生異常來(lái)通知退出

7.StandardError?— 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類

8.ArithmeticError?— 所有數(shù)值計(jì)算錯(cuò)誤的基類

9.FloatingPointError?— 浮點(diǎn)計(jì)算錯(cuò)誤

10.OverflowError?— 數(shù)值運(yùn)算超出最大限制

11.ZeroDivisionError?— 除(或取模)零 (所有數(shù)據(jù)類型)

12.AssertionError?— 斷言語(yǔ)句失敗

13.AttributeError?— 對(duì)象沒有這個(gè)屬性

14.EOFError?— 沒有內(nèi)建輸入,到達(dá)EOF 標(biāo)記

15.EnvironmentError?— 操作系統(tǒng)錯(cuò)誤的基類

16.IOError?— 輸入/輸出操作失敗

17.OSError?— 操作系統(tǒng)錯(cuò)誤

18.WindowsError?— 系統(tǒng)調(diào)用失敗

19.ImportError?— 導(dǎo)入模塊/對(duì)象失敗

20.LookupError?— 無(wú)效數(shù)據(jù)查詢的基類

21.IndexError?— 列中沒有此索引(index)

22.KeyError?— 映射中沒有這個(gè)鍵

23.MemoryError?— 內(nèi)存溢出錯(cuò)誤(對(duì)于Python 解釋器不是致命的)

24.NameError?— 未聲明/初始化對(duì)象 (沒有屬性)

25.UnboundLocalError?— 訪問未初始化的本地變量

26.ReferenceError?— 弱引用(Weak reference)試圖訪問已經(jīng)垃圾回收了的對(duì)象

27.RuntimeError?— 一般的運(yùn)行時(shí)錯(cuò)誤

28.NotImplementedError?— 尚未實(shí)現(xiàn)的方法

29.SyntaxError?— Python 語(yǔ)法錯(cuò)誤

30.IndentationError?— 縮進(jìn)錯(cuò)誤

31.TabError?—? Tab 和空格混用

32.SystemError?— 一般的解釋器系統(tǒng)錯(cuò)誤

33.TypeError?— 對(duì)類型無(wú)效的操作

34.ValueError?— 傳入無(wú)效的參數(shù)

35.UnicodeError?— Unicode 相關(guān)的錯(cuò)誤

36.UnicodeDecodeError?— Unicode 解碼時(shí)的錯(cuò)誤

37.UnicodeEncodeError?— Unicode 編碼時(shí)錯(cuò)誤

38.UnicodeTranslateError?— Unicode 轉(zhuǎn)換時(shí)錯(cuò)誤

39.Warning?— 警告的基類

40.DeprecationWarning?— 關(guān)于被棄用的特征的警告

41.FutureWarning?— 關(guān)于構(gòu)造將來(lái)語(yǔ)義會(huì)有改變的警告

42.OverflowWarning?— 舊的關(guān)于自動(dòng)提升為長(zhǎng)整型(long)的警告

43.PendingDeprecationWarning?— 關(guān)于特性將會(huì)被廢棄的警告

44.RuntimeWarning?— 可疑的運(yùn)行時(shí)行為(runtime behavior)的警告

45.SyntaxWarning?— 可疑的語(yǔ)法的警告

46.UserWarning?— 用戶代碼生成的警告

?

python 異常處理(25)

二.捕獲異常方式

1.捕獲所有異常

1

2

3

4

try:

????<代碼>

except:

????print("異常說明")

示例代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(個(gè)人博客地址): shuopython.com

@WeChat Official Account(微信公眾號(hào)):猿說python

@Github:www.github.com

@File:try_except.py

@Time:2019/10/9 21:27

?

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

"""

?

try:

????x=3/0# 程序出現(xiàn)異常,不會(huì)繼續(xù)執(zhí)行后面的代碼

????print("hello world")

except:

????print("異常說明:分母不能為0")

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

異常說明:分母不能為0

程序正常結(jié)束

?

2.捕獲指定異常

1

2

3

4

try:

????<語(yǔ)句>

except<異常名>:

????print('異常說明')

示例代碼:

1

2

3

4

5

6

7

8

try:

????fp=open("123.txt","r")# 程序出現(xiàn)異常,不會(huì)繼續(xù)執(zhí)行后面的代碼

????print("hello world")

????fp.close()

exceptIOError:

????print("異常說明:文件讀取失敗")

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

異常說明:文件讀取失敗

程序正常結(jié)束

?

3.捕獲多個(gè)異常

1

2

3

4

5

6

7

8

try:

????<語(yǔ)句>

except<異常名1>:

????print('異常說明1')

except<異常名2>:

????print('異常說明2')

except<異常名3>:

????print('異常說明3')

該種異常處理語(yǔ)法的規(guī)則是:

a.執(zhí)行try下的語(yǔ)句,如果引發(fā)異常,則執(zhí)行過程會(huì)跳到第一個(gè)except語(yǔ)句。

b.如果第一個(gè)except中定義的異常名與引發(fā)的異常匹配,則執(zhí)行該except中的語(yǔ)句。

c.如果引發(fā)的異常不匹配第一個(gè)except,則會(huì)搜索第二個(gè)except,允許編寫的except數(shù)量沒有限制。

d.如果所有的except都不匹配,則異常會(huì)傳遞到下一個(gè)調(diào)用本代碼的最高層try代碼中。

示例代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

try:

????fp=open("123.txt","r")# 程序出現(xiàn)異常,不會(huì)繼續(xù)執(zhí)行后面的代碼

????print("hello world")

????fp.close()

exceptGeneratorExit:

????print("異常說明:GeneratorExit")

exceptFloatingPointError:

????print("異常說明:FloatingPointError")

exceptOverflowError:

????print("異常說明:OverflowError")

exceptZeroDivisionError:

????print("異常說明:ZeroDivisionError")

exceptIOError:

????print("異常說明:IOError")

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

異常說明:IOError

程序正常結(jié)束

?

4.萬(wàn)能的異常捕獲

1

2

3

4

try:

????<語(yǔ)句>

exceptExceptionase:# 自動(dòng)識(shí)別異常信息,并將異常信息保存在e中

????print('異常說明:',e)

示例代碼:

1

2

3

4

5

6

7

8

try:

????fp=open("python.txt","r")# 程序出現(xiàn)異常,不會(huì)繼續(xù)執(zhí)行后面的代碼

????print("hello world")

????fp.close()

exceptExceptionase:

????print("異常說明:",e)

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

異常說明:[Errno2]Nosuchfileordirectory:'python.txt'

程序正常結(jié)束

?

python 異常處理(25)

?

5.異常中的?else

如果判斷完沒有異常之后還想做其他事,就可以使用下面這樣的else語(yǔ)句,注意:是在try中沒有異常情況下,才會(huì)執(zhí)行else之后的代碼。

1

2

3

4

5

6

7

8

try:

????<語(yǔ)句>

except<異常名1>:

????print('異常說明1')

except<異常名2>:

????print('異常說明2')

else:

????<語(yǔ)句>??# try語(yǔ)句中沒有異常則執(zhí)行此段代碼

示例代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

try:

????print("hello world")

exceptGeneratorExit:

????print("異常說明:GeneratorExit")

exceptFloatingPointError:

????print("異常說明:FloatingPointError")

exceptOverflowError:

????print("異常說明:OverflowError")

exceptZeroDivisionError:

????print("異常說明:ZeroDivisionError")

else:

????print("i love you")

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

3

helloworld

iloveyou

程序正常結(jié)束

?

6.異常中的finally

try…finally…語(yǔ)句無(wú)論是否發(fā)生異常都將會(huì)執(zhí)行最后的代碼。

1

2

3

4

try:

????<語(yǔ)句>

finally:

????<語(yǔ)句>

示例代碼:

1

2

3

4

5

6

7

8

9

10

try:

????fp=open("python.txt","r")# 程序出現(xiàn)異常,不會(huì)繼續(xù)執(zhí)行后面的代碼

????print("hello world")

????fp.close()

exceptExceptionase:

????print("異常說明:",e)

finally:

????print("finally")# 無(wú)論是否發(fā)生異常都將會(huì)執(zhí)行最后的代碼

?

print("程序正常結(jié)束")

輸出結(jié)果:

1

2

3

異常說明:[Errno2]Nosuchfileordirectory:'python.txt'

finally

程序正常結(jié)束

?

7.raise主動(dòng)觸發(fā)異常

可以使用raise語(yǔ)句自己觸發(fā)異常,語(yǔ)法如下:

1

raise[Exception[,args[,traceback]]]

語(yǔ)句中 Exception 是異常的類型(例如,IOError?)參數(shù)標(biāo)準(zhǔn)異常中任一種,args 是自已提供的異常參數(shù)。最后一個(gè)參數(shù)是可選的(在實(shí)踐中很少使用),如果存在,是跟蹤異常對(duì)象;示例代碼如下:

1

2

3

4

5

6

7

try:

????raiseException("raise Exception!")??# 觸發(fā)異常后,后面的代碼就不會(huì)再執(zhí)行

????print("hello world")

exceptExceptionase:

????print(e)

finally:

????print("OK")

輸出結(jié)果:

1

2

raiseException!

OK

python 異常處理(25)

?

四.重點(diǎn)總結(jié)

在python開發(fā)中,為了增加程序的健壯性,異常處理try…except…是必須掌握的內(nèi)容.

?

猜你喜歡:

1.python文件讀寫操作

2.python內(nèi)置函數(shù)input/eval

?

轉(zhuǎn)載請(qǐng)注明:猿說Python???python異常處理


文章標(biāo)題:python異常處理(25)
文章來(lái)源:http://weahome.cn/article/jpogcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部