欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

分析Python異常處理

本篇內(nèi)容主要講解“分析Python異常處理”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“分析Python異常處理”吧!

為太仆寺等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及太仆寺網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、太仆寺網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

“你不可能總是對(duì)的”

甚至計(jì)算機(jī)也會(huì)有失誤的時(shí)候。當(dāng)然程序員也不例外,就算是經(jīng)驗(yàn)豐富的碼農(nóng),也不能保證寫(xiě)出來(lái)的代碼百分之百?zèng)]有任何問(wèn)題(要不哪來(lái)的那么多的漏洞)。

程序出現(xiàn)邏輯錯(cuò)誤或者用戶輸入不合法都會(huì)引發(fā)異常,但這些一場(chǎng)不是致命的,不會(huì)導(dǎo)致程序壞死。可以利用Python提供的異常處理機(jī)制,在異常出現(xiàn)的時(shí)候及時(shí)捕獲,并從內(nèi)部消化掉。

那么接下來(lái)就是正確學(xué)習(xí)Python的姿勢(shì)了。

那什么是異常呢?我們先來(lái)了解下,如果你編寫(xiě)了一個(gè)異常代碼,運(yùn)行后,會(huì)出現(xiàn)異常,代碼會(huì)停止,并顯示出一個(gè) Traceback ,這其中就包含了有關(guān)異常的報(bào)告,舉個(gè)例子:

#example1.py

file_name = '不存在的文件.txt'

f = open(file_name, 'r')

print('輸出文件內(nèi)容:')

for line in f:

print(line)

這里是打開(kāi)一個(gè)不存在的文件,那么這就會(huì)使代碼出現(xiàn)異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example1.py", line 2, in

f = open(file_name, 'r')

FileNotFoundError: [Errno 2] No such file or directory: '隨便來(lái)個(gè)文件.txt'

上面的例子就拋出了一個(gè)FileNotFoundError異常。

當(dāng)然了Python不可能只拋出這么一個(gè)異常,

那Python通常會(huì)拋出那些異常呢?這里我先一一列舉出來(lái),做個(gè)總結(jié),讓大家先有個(gè)認(rèn)識(shí),這樣今后遇見(jiàn)這樣的異常時(shí)就不會(huì)感到陌生了。

常見(jiàn)異常總結(jié)

1. FileNotFoundError:找不到文件異常

使用文件時(shí),一種常見(jiàn)的問(wèn)題是找不到文件:你要查找的文件可能在其他什么地方,文件名可能不正確或者這個(gè)文件根本不存在。

上面已舉例,這里我就不再舉例了。

2. AssertionError:斷言語(yǔ)句(assert)失敗

當(dāng) assert 這個(gè)我關(guān)鍵字后面的條件為假時(shí),程序?qū)⑼V共伋?AssertionError 異常。assert 語(yǔ)句一般是在測(cè)試程序的時(shí)候用于在代碼中置入檢查點(diǎn):

#example2

my_list = ['example2']

assert len(my_list) > 0

my_list.pop()

assert len(my_list) > 0

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 5, in

assert len(my_list) > 0

AssertionError

3. AttributeError:嘗試訪問(wèn)未知的對(duì)象屬性

當(dāng)試圖訪問(wèn)的對(duì)象屬性不存在時(shí)拋出 AttributeError 異常:

#example3

my_list = []

my_list.example3

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 2, in

my_list.example3

AttributeError: 'list' object has no attribute 'example3'

4. IndexError:索引超出序列范圍

在使用序列的時(shí)候就常常會(huì)遇到 IndexError 異常,原因是索引超出序列范圍的內(nèi)容:

#example4

my_list = [1,2,3]

x = my_list[3]

print(x)

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 2, in

x = my_list[3]

IndexError: list index out of range

5. KeyError:字典中查找一個(gè)不存在的關(guān)鍵字

當(dāng)試圖在字典中查找一個(gè)不存在的關(guān)鍵字時(shí)就會(huì)引發(fā) KeyError 異常,因此建議使用 dict.get()方法:

# example5

my_dist = {'one':1, 'two':2, 'three':3}

x = my_dist['one']

print(x)

y = my_dist['four']

print(y)

異常:

1

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 4, in

y = my_dist['four']

KeyError: 'four'

6. NameError:嘗試訪問(wèn)一個(gè)不存在的變量

當(dāng)嘗試訪問(wèn)一個(gè)不存在的變量時(shí),Python會(huì)拋出 NameError 異常:

#example6

example6

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

example6

NameError: name 'example6' is not defined

7. OSError:操作系統(tǒng)產(chǎn)生的異常

OSError ,顧名思義就是操作系統(tǒng)產(chǎn)生的異常,就像打開(kāi)一個(gè)不存在的文件就會(huì)引發(fā) FileNotFindError ,而這個(gè) FileNotFindError 就是 OSError 的子類。

例子在上面已演示過(guò)了,這里就不再重說(shuō)了。

8. SyntaxError:Python 的語(yǔ)法錯(cuò)誤

如果遇到 SyntaxError 是 Python 的語(yǔ)法錯(cuò)誤,這時(shí) Python 的代碼并不能繼續(xù)執(zhí)行,應(yīng)該先找到并改正錯(cuò)誤:

#example8

print 'I am example8'

異常:

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1

print 'I am example8'

^

SyntaxError: Missing parentheses in call to 'print'. Did you mean print('I am example8')?

9. TypeError:不同類型間的無(wú)效操作

類型不同的對(duì)象是不能互相進(jìn)行計(jì)算的,否則會(huì)拋出 TypeError 異常:

#example9

x = 1 + '1'

print(x)

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

x = 1 + '1'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

10. ZeroDivisionError:除數(shù)為零

地球人都知道除數(shù)不為零,所以除以零就會(huì)引發(fā) ZeroDivisionError 異常:

#example10

x = 365 / 0

print(x)

異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

x = 365 / 0

ZeroDivisionError: division by zero

現(xiàn)在我們已經(jīng)講完常見(jiàn)的異常類型了,那接下來(lái)就是進(jìn)入正題,該如何處理異常了

一、 try—except 語(yǔ)句

1. 語(yǔ)法結(jié)構(gòu):

try:

檢測(cè)內(nèi)容

except Exception [as reason]:

出現(xiàn)異常(Exception)后的處理代碼

2. 簡(jiǎn)單舉個(gè)例子:

#example

f = open('不存在的文檔.txt')

print(f.read())

f.close()

當(dāng)上面的例子中’不存在的文檔.txt‘,這個(gè)文檔不存在時(shí),Python就會(huì)報(bào)錯(cuò)出現(xiàn)異常:

Traceback (most recent call last):

File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

f = open('不存在的文檔.txt')

FileNotFoundError: [Errno 2] No such file or directory: '不存在的文檔.txt'

這時(shí)為了解決異常問(wèn)題,我們可以這么修改代碼:

try:

f = open('不存在的文檔.txt')

print(f.read())

f.close()

except OSError:

print('文件打開(kāi)的時(shí)候出錯(cuò)啦T_T')

運(yùn)行一下試試:

文件打開(kāi)的時(shí)候出錯(cuò)啦T_T

注:這里我之所以用 OSError 而沒(méi)用 FileNotFindError 是因?yàn)閷?dǎo)致 OSError 異常的原因有很多(如 FileNotFindError,F(xiàn)ileExistsError,PermissionError 等)

當(dāng)然了,如果你更在意出錯(cuò)的具體內(nèi)容,這里可以用 as 把具體的錯(cuò)誤信息給打印出來(lái):

try:

f = open('不存在的文檔.txt')

print(f.read())

f.close()

except OSError as reason:

print('文件打開(kāi)的時(shí)候出錯(cuò)啦T_T\n 錯(cuò)誤原因是:' + str(reason))

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

文件打開(kāi)的時(shí)候出錯(cuò)啦T_T

錯(cuò)誤原因是:[Errno 2] No such file or directory: '不存在的文檔.txt'

3. 針對(duì)不同異常設(shè)置多個(gè) except

一個(gè) try 語(yǔ)句可以和多個(gè) except 語(yǔ)句搭配(缺點(diǎn)是它只會(huì)返回第一個(gè)發(fā)現(xiàn)的異常):

#example

try:

x = 1 + '1'

f = open('不存在的文檔.txt')

print(f.read())

f.close()

except OSError as reason:

print('文件打開(kāi)的時(shí)候出錯(cuò)啦T_T\n 錯(cuò)誤原因是:' + str(reason))

except TypeError as reason:

print('類型出錯(cuò)啦T_T\n 錯(cuò)誤原因是:' + str(reason))

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

類型出錯(cuò)啦T_T

錯(cuò)誤原因是:unsupported operand type(s) for +: 'int' and 'str'

4. 對(duì)多個(gè)異常統(tǒng)一處理

except 后面還可以跟著多個(gè)異常,然后對(duì)這些異常進(jìn)行統(tǒng)一的處理(同樣缺點(diǎn)是它只會(huì)返回第一個(gè)發(fā)現(xiàn)的異常):

try:

int('abc')

x = 1 + '1'

f = open('不存在的文檔.txt')

print(f.read())

f.close()

except (OSError, TypeError, ValueError) as reason:

print('出錯(cuò)啦T_T\n 錯(cuò)誤原因是:' + str(reason))

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

出錯(cuò)啦T_T鄭州哪個(gè)醫(yī)院做人流好 http://www.hnmt120.com/

錯(cuò)誤原因是:invalid literal for int() with base 10: 'abc'

5. 捕獲所有異常

如果你無(wú)法判斷要對(duì)哪一類型的異常進(jìn)行處理,只是希望在 try 語(yǔ)句中一旦出現(xiàn)異常,可以返回一個(gè)看得懂的異常錯(cuò)誤提醒,那么可以這么做:

try:

int('abc')

x = 1 + '1'

f = open('不存在的文檔.txt')

print(f.read())

f.close()

except:

print('出錯(cuò)啦T_T')

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

出錯(cuò)啦T_T

注: 不過(guò)通常不建議這么做,因?yàn)樗鼤?huì)隱藏所有程序未想到并且未做好處理準(zhǔn)備的錯(cuò)誤。

二、 try—finally 語(yǔ)句

如果確定存在一個(gè)名為 ’不存在的文檔.txt‘ 的文件,open() 函數(shù)正常返回文件對(duì)象,但異常卻發(fā)生在成功打開(kāi)文件后的 x = 1 + ’1‘ 語(yǔ)句上。此時(shí) Python 將直接跳到 except 語(yǔ)句上,也就是說(shuō),文件打開(kāi)了,但關(guān)閉文件的命令卻被跳過(guò)了,導(dǎo)致沒(méi)有關(guān)閉文件。

try:

f = open('不存在的文檔.txt')

print(f.read())

x = 1 + '1'

f.close()

except:

print('出錯(cuò)啦T_T')

因此出現(xiàn)了,為了實(shí)現(xiàn)像這種”就算出現(xiàn)異常,但也并不的不執(zhí)行的收尾工作(如在程序崩潰前保存用戶文檔)“,引入了 finally 來(lái)擴(kuò)展 try:

try:

f = open('不存在的文檔.txt')

print(f.read())

x = 1 + '1'

except:

print('出錯(cuò)啦T_T')

finally:

f.close()

注:如果 try 語(yǔ)句塊中沒(méi)有出現(xiàn)任何異常,會(huì)跳過(guò) except 語(yǔ)句塊執(zhí)行 finally 語(yǔ)句塊的內(nèi)容。如果出現(xiàn)了異常,則會(huì)先執(zhí)行 except 語(yǔ)句塊的內(nèi)容再執(zhí)行 finally 語(yǔ)句塊的內(nèi)容。總之,finally 語(yǔ)句塊中的內(nèi)容就是確保無(wú)論如何都將被執(zhí)行的內(nèi)容。

三、 try—except 擴(kuò)展 (出現(xiàn)異常時(shí)一聲不吭)

如果我們想在出現(xiàn)異常時(shí),當(dāng)作什么也沒(méi)發(fā)生,不做任何處理,可以使用 pass 語(yǔ)句來(lái)實(shí)現(xiàn)。

try:

f = open('不存在的文檔.txt')

print(f.read())

except:

pass

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

Process finished with exit code 0

四、 else 語(yǔ)句搭配

else 語(yǔ)句還能與異常處理進(jìn)行搭配,實(shí)現(xiàn)方法與循環(huán)語(yǔ)句搭配差不多:只要 try 語(yǔ)句塊里沒(méi)有出現(xiàn)任何異常,那么就會(huì)執(zhí)行 else 語(yǔ)句塊里的內(nèi)容。

try:

int(4.5)

except ValueError as reason:

print('出錯(cuò)啦T_T: '+ str(reason))

else:

print('沒(méi)有任何異常!')

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

沒(méi)有任何異常!

Process finished with exit code 0

五、 簡(jiǎn)潔的 with 語(yǔ)句

你們?cè)谕嫖募臅r(shí)候可能都見(jiàn)過(guò) with 語(yǔ)句 ,但是你們都理解為什么要帶著它嗎?

你們可能覺(jué)得,既要打開(kāi)文件又要關(guān)閉文件,還要關(guān)注異常處理,有點(diǎn)麻煩,所以 Python 提供了一個(gè) with 語(yǔ)句,利用這個(gè)語(yǔ)句抽象出文件操作中頻繁使用的 try/except/finally 相關(guān)的細(xì)節(jié)。對(duì)文件操作使用 with 語(yǔ)句,將大大減少代碼量,而且再也不用擔(dān)心出現(xiàn)文件打開(kāi)了忘記關(guān)閉的問(wèn)題了 ( with 會(huì)自動(dòng)幫助關(guān)閉文件)。

舉例:

try:

f = open('不存在的文檔.txt', 'w')

print(f.read())

except OSError as reason:

print('出錯(cuò)啦T_T: ' + str(reason))

finally:

f.close()

使用 with 語(yǔ)句 ,可以改成以下這樣:

try:

with open('不存在的文檔.txt', 'w') as f:

print(f.read())

except OSError as reason:

print('出錯(cuò)啦T_T: ' + str(reason))

是不是覺(jué)得很方便呢,有了 with 語(yǔ)句,就在也不用擔(dān)心忘記關(guān)閉文件了。

到此,相信大家對(duì)“分析Python異常處理”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享標(biāo)題:分析Python異常處理
新聞來(lái)源:http://chinadenli.net/article34/jhjope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)服務(wù)器托管App開(kāi)發(fā)標(biāo)簽優(yōu)化移動(dòng)網(wǎng)站建設(shè)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)