亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

python---異常處理

Alfred / 2250人閱讀

摘要:總結(jié)判斷式的異常處理只能針對(duì)某一段代碼,對(duì)于不同的代碼段的相同類型的錯(cuò)誤你需要寫(xiě)重復(fù)的來(lái)進(jìn)行處理。提示是基于文件句柄而存在的,因而只能在拋出異常后才可以執(zhí)行異常類只能用來(lái)處理指定的異常情況,如果非指定異常則無(wú)法處理。

異常和錯(cuò)誤 程序中難免出現(xiàn)錯(cuò)誤,而錯(cuò)誤分成兩種

1.語(yǔ)法錯(cuò)誤(這種錯(cuò)誤,根本過(guò)不了python解釋器的語(yǔ)法檢測(cè),必須在程序執(zhí)行前就改正)

#語(yǔ)法錯(cuò)誤示范一
if

#語(yǔ)法錯(cuò)誤示范二
def test:
    pass

#語(yǔ)法錯(cuò)誤示范三
print(haha

2.邏輯錯(cuò)誤(邏輯錯(cuò)誤)

#用戶輸入不完整(比如輸入為空)或者輸入非法(輸入不是數(shù)字)
num=input(">>: ")
int(num)

#無(wú)法完成計(jì)算
res1=1/0
res2=1+"str"
什么是異常

異常就是程序運(yùn)行時(shí)發(fā)生錯(cuò)誤的信號(hào),在python中,錯(cuò)誤觸發(fā)的異常如下

python中的異常種類

在python中不同的異??梢杂貌煌念愋停╬ython中統(tǒng)一了類與類型,類型即類)去標(biāo)識(shí),不同的類對(duì)象標(biāo)識(shí)不同的異常,一個(gè)異常標(biāo)識(shí)一種錯(cuò)誤
1.觸發(fā)IndexError

l=["egon","aa"]
l[3]

2.觸發(fā)KeyError

dic={"name":"egon"}
dic["age"]

3.觸發(fā)ValueError

s="hello"
int(s)

4.常用異常

AttributeError 試圖訪問(wèn)一個(gè)對(duì)象沒(méi)有的樹(shù)形,比如foo.x,但是foo沒(méi)有屬性x
IOError 輸入/輸出異常;基本上是無(wú)法打開(kāi)文件
ImportError 無(wú)法引入模塊或包;基本上是路徑問(wèn)題或名稱錯(cuò)誤
IndentationError 語(yǔ)法錯(cuò)誤(的子類) ;代碼沒(méi)有正確對(duì)齊
IndexError 下標(biāo)索引超出序列邊界,比如當(dāng)x只有三個(gè)元素,卻試圖訪問(wèn)x[5]
KeyError 試圖訪問(wèn)字典里不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個(gè)還未被賦予對(duì)象的變量
SyntaxError Python代碼非法,代碼不能編譯(個(gè)人認(rèn)為這是語(yǔ)法錯(cuò)誤,寫(xiě)錯(cuò)了)
TypeError 傳入對(duì)象類型與要求的不符合
UnboundLocalError 試圖訪問(wèn)一個(gè)還未被設(shè)置的局部變量,基本上是由于另有一個(gè)同名的全局變量,
導(dǎo)致你以為正在訪問(wèn)它
ValueError 傳入一個(gè)調(diào)用者不期望的值,即使值的類型是正確的

5.更多異常

ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
異常處理 使用if判斷式

1.正常的代碼

num1=input(">>: ") #輸入一個(gè)字符串試試
int(num1)

2.使用if判斷進(jìn)行異常處理

#_*_coding:utf-8_*_

num1=input(">>: ") #輸入一個(gè)字符串試試
if num1.isdigit():
    int(num1) #我們的正統(tǒng)程序放到了這里,其余的都屬于異常處理范疇
elif num1.isspace():
    print("輸入的是空格,就執(zhí)行我這里的邏輯")
elif len(num1) == 0:
    print("輸入的是空,就執(zhí)行我這里的邏輯")
else:
    print("其他情情況,執(zhí)行我這里的邏輯")

"""
問(wèn)題一:
使用if的方式我們只為第一段代碼加上了異常處理,但這些if,跟你的代碼邏輯并無(wú)關(guān)系,這樣你的代碼會(huì)因?yàn)榭勺x性差而不容易被看懂

問(wèn)題二:
這只是我們代碼中的一個(gè)小邏輯,如果類似的邏輯多,那么每一次都需要判斷這些內(nèi)容,就會(huì)倒置我們的代碼特別冗長(zhǎng)。
"""

總結(jié):

1.if判斷式的異常處理只能針對(duì)某一段代碼,對(duì)于不同的代碼段的相同類型的錯(cuò)誤你需要寫(xiě)重復(fù)的if來(lái)進(jìn)行處理。

2.在你的程序中頻繁的寫(xiě)與程序本身無(wú)關(guān),與異常處理有關(guān)的if,會(huì)使得你的代碼可讀性極其的差

3.if是可以解決異常的,只是存在1,2的問(wèn)題,所以,千萬(wàn)不要妄下定論if不能用來(lái)異常處理。

def test():
    print("test running")
choice_dic={
    "1":test
}
while True:
    choice=input(">>: ").strip()
    if not choice or choice not in choice_dic:continue #這便是一種異常處理機(jī)制啊
    choice_dic[choice]()
python為每一種異常定制了一個(gè)類型,然后提供了一種特定的語(yǔ)法結(jié)構(gòu)用來(lái)進(jìn)行異常處理

1.基本語(yǔ)法

try:
     被檢測(cè)的代碼塊
except 異常類型:
     try中一旦檢測(cè)到異常,就執(zhí)行這個(gè)位置的邏輯
讀文件例1
f = open("a.txt")

g = (line.strip() for line in f)
for line in g:
    print(line)
else:
    f.close()
讀文件例2
try:
    f = open("a.txt")
    g = (line.strip() for line in f)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
except StopIteration:
    f.close()

next(g)會(huì)觸發(fā)迭代f,依次next(g)就可以讀取文件的一行行內(nèi)容,無(wú)論文件a.txt有多大,同一時(shí)刻內(nèi)存中只有一行內(nèi)容。
提示:g是基于文件句柄f而存在的,因而只能在next(g)拋出異常StopIteration后才可以執(zhí)行f.close()

2.異常類只能用來(lái)處理指定的異常情況,如果非指定異常則無(wú)法處理。

s1 = "hello"
try:
    int(s1)
except IndexError as e:
    print(e)

3.多分支

s1 = "hello"
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

4.萬(wàn)能異常 在python的異常中,有一個(gè)萬(wàn)能異常:Exception,他可以捕獲任意異常

    s1 = "hello"
try:
    int(s1)
except Exception as e:
    print(e)

4.1.如果你想要的效果是,無(wú)論出現(xiàn)什么異常,我們統(tǒng)一丟棄,或者使用同一段代碼邏輯去處理他們,那么騷年,大膽的去做吧,只有一個(gè)Exception就足夠了。

s1 = "hello"
try:
    int(s1)
except Exception,e:
    "丟棄或者執(zhí)行其他邏輯"
    print(e)

#如果你統(tǒng)一用Exception,沒(méi)錯(cuò),是可以捕捉所有異常,但意味著你在處理所有異常時(shí)都使用同一個(gè)邏輯去處理(這里說(shuō)的邏輯即當(dāng)前expect下面跟的代碼塊)

4.2如果你想要的效果是,對(duì)于不同的異常我們需要定制不同的處理邏輯,那就需要用到多分支了

s1 = "hello"
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

4.3多分支加Exception

s1 = "hello"
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)

3.異常的其他機(jī)構(gòu)

s1 = "hello"
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print("try內(nèi)代碼塊沒(méi)有異常則執(zhí)行我")
finally:
    print("無(wú)論異常與否,都會(huì)執(zhí)行該模塊,通常是進(jìn)行清理工作")

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

try:
    raise TypeError("類型錯(cuò)誤")
except Exception as e:
    print(e)

5.自定義異常

class EvaException(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
    raise EvaException("類型錯(cuò)誤")
except EvaException as e:
    print(e)

6.斷言

# assert 條件
 
assert 1 == 1
 
assert 1 == 2

總結(jié):try..except的方式比較if的方式的好處

1:把錯(cuò)誤處理和真正的工作分開(kāi)來(lái)
2:代碼更易組織,更清晰,復(fù)雜的工作任務(wù)更容易實(shí)現(xiàn);
3:毫無(wú)疑問(wèn),更安全了,不至于由于一些小的疏忽而使程序意外崩潰了;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42102.html

相關(guān)文章

  • 從JavaScript到Python異常

    摘要:但如果忽視異常輕則影響功能運(yùn)行,重則導(dǎo)致系統(tǒng)崩潰,造成經(jīng)濟(jì)損失。異常處理捕獲異常捕獲關(guān)鍵字與一致,都是使用。語(yǔ)句塊表示無(wú)論是否發(fā)生異常,語(yǔ)句塊代碼一定會(huì)被執(zhí)行。 不少前端工程師看到這個(gè)標(biāo)題可能會(huì)產(chǎn)生質(zhì)問(wèn): 我js用得好好的,能后端能APP,為什么還要學(xué)習(xí)Python? 至少有下面兩個(gè)理由: 學(xué)習(xí)曲線。ES6之后的JavaScript(TypeScript)的在語(yǔ)法上和Python有很...

    xcold 評(píng)論0 收藏0
  • python錯(cuò)誤、異常和程序調(diào)試

    摘要:關(guān)鍵字拼寫(xiě)錯(cuò)誤時(shí)會(huì)提示語(yǔ)法錯(cuò)誤,而變量名函數(shù)名拼寫(xiě)錯(cuò)誤會(huì)在運(yùn)行時(shí)給出的錯(cuò)誤提示腳本程序不符合的語(yǔ)法規(guī)范例如如少了括號(hào),冒號(hào)等符號(hào),以及表達(dá)式書(shū)寫(xiě)錯(cuò)誤等。異常的處理異常是程序在運(yùn)行過(guò)程中引發(fā)的錯(cuò)誤。 異常是Python程序在運(yùn)行過(guò)程中引發(fā)的錯(cuò)誤,如果程序中引發(fā)了未進(jìn)行處理的異常,程序就會(huì)由于異常而終止運(yùn)行,只有為程序添加異常處理,才能使程序更健壯。 Python對(duì)異常的處理,有它自己的語(yǔ)...

    Object 評(píng)論0 收藏0
  • [原] 深入對(duì)比數(shù)據(jù)科學(xué)工具箱:Python 和 R 的異常處理機(jī)制

    摘要:對(duì)于異常機(jī)制的合理運(yùn)用是直接關(guān)系到碼農(nóng)飯碗的事情所以,本文將具體介紹一下和的異常處理機(jī)制,闡明二者在異常處理機(jī)制上的異同。下面將具體介紹二者的異常處理機(jī)制。 概述 showImg(https://segmentfault.com/img/remote/1460000006760426); 異常處理,是編程語(yǔ)言或計(jì)算機(jī)硬件里的一種機(jī)制,用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況(即超出程序正...

    FreeZinG 評(píng)論0 收藏0
  • 使用Python進(jìn)行異常處理

    摘要:為此,我們需要使用不同的異常處理程序定義多個(gè)子句。此異常由另一個(gè)異常子句處理,但除外。提高并重新提出異常中的關(guān)鍵字用于強(qiáng)制發(fā)生異常。如果沒(méi)有異常處理代碼,程序?qū)⒅淮蛴″e(cuò)誤消息并終止。因此,我們將使用子句,在記錄錯(cuò)誤后重新引發(fā)異常。 showImg(https://segmentfault.com/img/remote/1460000019165381?w=329&h=388); 來(lái)源...

    sydMobile 評(píng)論0 收藏0
  • 總結(jié):Python中的異常處理

    摘要:盡量使用內(nèi)置的異常處理語(yǔ)句來(lái)替換語(yǔ)句,比如語(yǔ)句,方法。以上是最簡(jiǎn)單的重新拋出異常的做法,也是推薦的做法。除了包含所有的外還包含了,和三個(gè)異常。避免在語(yǔ)句塊中干一些沒(méi)意義的事情,捕獲異常也是需要成本的。 異常處理在任何一門編程語(yǔ)言里都是值得關(guān)注的一個(gè)話題,良好的異常處理可以讓你的程序更加健壯,清晰的錯(cuò)誤信息更能幫助你快速修復(fù)問(wèn)題。在Python中,和不部分高級(jí)語(yǔ)言一樣,使用了try/ex...

    douzifly 評(píng)論0 收藏0
  • python異常機(jī)制個(gè)人理解(參考網(wǎng)上資料)

    摘要:如果有一個(gè)異常程序沒(méi)有處理,那么將調(diào)用默認(rèn)的處理器處理,并終止程序且給出提示。引發(fā)異常你可以用語(yǔ)句來(lái)引發(fā)一個(gè)異常。異常錯(cuò)誤對(duì)象必須有一個(gè)名字,且它們應(yīng)是或類的子類。參考資料凌風(fēng)技術(shù)站異常機(jī)制講解 當(dāng)你的程序中出現(xiàn)異常情況時(shí)就需要異常處理。比如當(dāng)你打開(kāi)一個(gè)不存在的文件時(shí)。當(dāng)你的程序中有一些無(wú)效的語(yǔ)句時(shí),Python會(huì)提示你有錯(cuò)誤存在。下面是一個(gè)拼寫(xiě)錯(cuò)誤的例子,print寫(xiě)成了Print。...

    CastlePeaK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<