日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

第十次课

發(fā)布時(shí)間:2025/7/25 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十次课 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

python異常處理

異常

一般情況下在python無法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常。
異常是python對(duì)象,表示一個(gè)錯(cuò)誤。當(dāng)python程序發(fā)生錯(cuò)誤時(shí)需要捕獲處理,否則程序會(huì)終止執(zhí)行。

異常處理

捕獲異常可以使用try/except語句。

該語句用來檢測(cè)try語句塊中的錯(cuò)誤,從而讓except語句捕獲異常信息并處理。

  • 語法規(guī)則

    1 2 3 4 5 6 7 8 9 10 try: <語句> #運(yùn)行別的代碼 except <名字>: <語句> #如果在try部份引發(fā)了'name'異常 except <名字>,<數(shù)據(jù)>: <語句> #如果引發(fā)了'name'異常,獲得附加的數(shù)據(jù) else: <語句> #如果沒有異常發(fā)生 finally: <語句> #不管如何,最后一定執(zhí)行的代碼
  • 處理流程
    當(dāng)開始一個(gè)try語句后,python會(huì)在當(dāng)前程序的上下文中進(jìn)行標(biāo)記,這樣當(dāng)異常出現(xiàn)時(shí)就可以回到這里,try子句先執(zhí)行,接下來發(fā)生什么依賴于執(zhí)行時(shí)是否出現(xiàn)異常。

  • 當(dāng)try后面的語句執(zhí)行出現(xiàn)異常,python就會(huì)調(diào)回try并執(zhí)行第一個(gè)匹配該異常的except子句,異常處理完成,然后控制流通過整個(gè)try語句。
  • 當(dāng)try后面的語句執(zhí)行出現(xiàn)異常,卻沒有匹配的except子句,異常將會(huì)被遞交到上層的try,或者到程序的最上層(也就是結(jié)束程序,并打印出缺省的出錯(cuò)信息)。
  • 當(dāng)try子句執(zhí)行沒有異常,python將執(zhí)行else后面的語句,然后控制流通過整個(gè)try語句。

    實(shí)例

    • 有異常出現(xiàn)被捕獲的情況
      1 2 3 4 5 6 7 8 9 10 try:print("開始計(jì)算")result = 2/0print("計(jì)算結(jié)果為:{0}".format(result)) except Exception as e:print("除數(shù)不能為0") else:print("無異常出現(xiàn)") finally:print("done")

    輸出結(jié)果

    1 2 3 開始計(jì)算 除數(shù)不能為0 done

    ?

    根據(jù)輸出結(jié)果可以看到,有異常出現(xiàn)的時(shí)候,先執(zhí)行try語句,遇到異常則停止執(zhí)行下面的語句(print("計(jì)算結(jié)果為:{0}".format(result))未執(zhí)行),跳轉(zhuǎn)至錯(cuò)誤處理代碼,也就是except語句塊,執(zhí)行完except后執(zhí)行finally語句塊。不執(zhí)行else語句塊。

    • 無異常出現(xiàn)情況
      1 2 3 4 5 6 7 8 9 10 try:print("開始計(jì)算")result = 2/1print("計(jì)算結(jié)果為:{0}".format(result)) except Exception as e:print("除數(shù)不能為0") else:print("無異常出現(xiàn)") finally:print("done")

    輸出結(jié)果

    1 2 3 4 開始計(jì)算 計(jì)算結(jié)果為:2.0 無異常出現(xiàn) done

    ?

    根據(jù)輸出結(jié)果可以看到,無異常出現(xiàn)的時(shí)候先后執(zhí)行了try、else和finally語句塊,未執(zhí)行except語句塊。
    在異常處理時(shí)else和finally語句塊可以沒有。

    • raise拋出錯(cuò)誤
      1 2 3 4 5 6 7 8 9 10 11 try:print("開始計(jì)算")result = 2/0print("計(jì)算結(jié)果為:{0}".format(result)) except Exception as e:print("除數(shù)不能為0")raise e #添加raise語句拋出錯(cuò)誤 else:print("無異常出現(xiàn)") finally:print("done")

    輸出結(jié)果

    1 2 3 4 5 6 7 開始計(jì)算 除數(shù)不能為0 done Traceback (most recent call last):File "<stdin>", line 7, in <module>File "<stdin>", line 3, in <module> ZeroDivisionError: division by zero

    ?

    通過添加raise拋出錯(cuò)誤,我們可以看到錯(cuò)誤類型為ZeroDivisionError。
    在python中內(nèi)置了很多的錯(cuò)誤類型,我們可以通過針對(duì)不同的錯(cuò)誤類型,可以使用不同的except語句處理。

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 try:print("開始計(jì)算")result = 2/int('a')print("計(jì)算結(jié)果為:{0}".format(result)) except ZeroDivisionError as e:print("除數(shù)不能為0")raise e except ValueError as e:print("ValueError")raise e else:print("無異常出現(xiàn)") finally:print("done")

    ?

    輸出結(jié)果

    1 2 3 4 5 6 7 開始計(jì)算 ValueError done Traceback (most recent call last):File "<stdin>", line 10, in <module>File "<stdin>", line 3, in <module> ValueError: invalid literal for int() with base 10: 'a'

    ?

    此時(shí)執(zhí)行try語句塊時(shí),int()函數(shù)拋出ValueError異常,所以執(zhí)行了第二個(gè)except捕獲對(duì)應(yīng)異常信息。
    前面我們?cè)趀xcept中直接使用Exception,由于大部分的錯(cuò)誤類型都是繼承自該類型,所以可直接捕獲其子類。
    python中所有的錯(cuò)誤都是從BaseException類派生的,點(diǎn)擊查看常見的錯(cuò)誤類型和繼承關(guān)系。

    異常信息規(guī)范輸出

    在常見的前后端分離開發(fā)環(huán)境中,對(duì)于異常信息通常都是按照約定格式,返回json字符串,從而將異常信息記錄下來。
    下面是一個(gè)示例

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import jsondef log():result = {}try:print(2/0)except Exception as e:result["msg"] = "Division can not be 0"result["code"] = 250result["data"] = [{"a": 1}, {"b": 2}]finally:return json.dumps(result) #字典轉(zhuǎn)換為json串if __name__ == '__main__':print(log())

    ?

    輸出結(jié)果

    1 {"msg": "Division can not be 0", "code": 250, "data": [{"a": 1}, {"b": 2}]}

    轉(zhuǎn)載于:https://my.oschina.net/u/3803404/blog/1800061

    總結(jié)

    以上是生活随笔為你收集整理的第十次课的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。