18:print('未成年')異常多指在程序執行過程中,出現的未知錯誤,語法和邏輯本身是正確的。可以通過代碼進行處理或修復異常分類除零異常(ZeroDivisionError):1/0名稱" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

關于Python中的錯誤與異常,你是否了解的夠仔細?

系統 1712 0

每次版本結束都描述這著同樣的錯誤,相似的問題,但始終沒見解決。所以今天,我就來總結下Python的錯誤與異常!

異常與錯誤

錯誤

  • 語法錯誤

    可以通過IDE或者解釋器給出提示的錯誤

opentxt('a.jpg','r')

  • 邏輯錯誤

    語法層面沒有問題,但是自己代碼的邏輯有問題

if age>18: print('未成年')

異常

多指在程序執行過程中,出現的未知錯誤,語法和邏輯本身是正確的。可以通過代碼進行處理或修復

異常分類

  • 除零異常(ZeroDivisionError):

    1/0

  • 名稱異常(NameError):

    if age>5,age未定義

  • 類型異常(TypeError):

? ? ?1+'abc'

  • 索引異常(IndexError):

    a=[1,2,3] a[4]

  • 鍵異常(KeyError):

    a={'a':1,'b':2} a['c']

  • 值異常(ValueError)

    int('abcd')

  • 屬性異常(AttributeError)

    name='Dracular' print(name.age)

  • 迭代器異常(StopIteration)

    a=iter([1,2]) print(next(a)) print(next(a)) print(next(a))

  • 系統異常類繼承樹(BaseException所有內建的異常基類)

    • SystemExit

      由sys.exit(0函數引發,當他不處理時,python解釋器退出)

    • KeyboardInterrupt

      當用戶中斷操作引發(ctrl +c)

    • GeneratorExit

      當調用一種generator的close()方法引發

    • Exception

      所有內置的、非系統退出異常是從該類派生的,因為該類派生所有用戶定義的異常

異常處理格式

關于Python中的錯誤與異常,你是否了解的夠仔細?_第1張圖片

多種異常捕獲

剛才介紹了很多異常的分類,也看到了異常處理的格式,那么針對多種異常如何更簡潔的捕獲呢?

  • 將多個異常通過元組歸類到一起

    except (ZeroDivisionError,NameError) as error:

  • 使用Exception這個基類全部捕獲

    except Exception as errorinfo:

使用with處理異常

用于執行一段代碼前,進行預處理,執行完成這段代碼后,進行清理操作
with content_expression[as target(s)]: withbody
大家用到最多的莫過于在讀寫文件時,使用with open

?

為什么說他是一個上下文處理器呢?
首先咱們在文件讀寫的時候主要分三個步驟:

  1. 打開文件

  2. 操作文件的內容

  3. 關閉文件

正常情況下,我們使用的方式為:

?

那么如果我們在操作文件的時候,出現了異常導致系統退出,就無法正常的關閉文件
但使用with的上下文管理器,就可以達到異常退出時的清理操作!
可是沒有論證,空口在這里吹逼不太好啊,舉個例子來驗證with自帶的異常清理。
先看下這段代碼:

關于Python中的錯誤與異常,你是否了解的夠仔細?_第2張圖片

我們在寫文件的時候,手動觸發一個異常,然后在except捕獲異常后,去重命名該文件。
然后由于沒有正常的關閉,此時你去重命名會給出文件正在占用的提示
那同樣的方式,我們使用with操作看看效果:

關于Python中的錯誤與異常,你是否了解的夠仔細?_第3張圖片

此時正常執行完成,程序沒有拋出異常,為什么?因為在上下文處理器中,with捕獲異常后,自動的執行了文件的關閉操作,溜不溜?

上下文管理器原理

所謂上下文管理器的原理,其實就是以下三點

  1. 調用enter?方法,進行預處理操作

  2. 執行用戶操作

  3. 調用exit方法,完成清理操作

知道了原理,讓我們通過自己編寫的上下文管理器,重構一下open的方法,讓它裝逼即耀眼又安全吧

關于Python中的錯誤與異常,你是否了解的夠仔細?_第4張圖片

完美結束….

了解下剛才的 __exit__

剛才看到在定義 __exit__ 方法時,自帶了三個參數exc type, exc val, exc_tb
這是什么呢?分別為:異常類別,異常值,追蹤信息,怎么看他的值呢?
把上面代碼中 raise ValueError 改為 1/0
在`__exit
`方法中加入print(exc_type, exc_val, exc_tb)
得到如下結果:

division by zero
大家會問到追蹤信息是什么呢?其實大家天天見….當你代碼錯誤了,提示哪一行有問題的時候,這個幫你定位的東西,就是追蹤信息。
想看到追蹤信息需要引入一個模塊,traceback
繼續在 __exit__ 中添加這兩行信息

import traceback
print(traceback.extract_tb(exc_tb))

output:

[('E:/Python/xxxx/b.py', 21, ' ', 'raise ValueError')]
上面個list什么意思呢?錯誤的文件,錯誤的行號,文件類型,錯誤的語句

是不是吊炸天?好了今天就學到這里,碎覺…..

The End

OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點擊文章右下角的“ 在看 ”。
期待你關注我的公眾號 清風Python ,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

作者:清風Python


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本欧美不卡一区二区三区在线 | 538porm在线看国产亚洲 | 国产日韩精品一区 | 中文字字幕在线 | 久久亚洲欧美日韩精品专区 | 香蕉久草在线 | 日韩中文字幕在线播放 | 中文字幕亚洲一区 | 中文久久| 久色 | 天天躁天天碰天天看 | 成人午夜| 91久久精品一区二区二区 | 亚洲国产二区 | 国产成人精品免费午夜 | 99re6在线| 成人一区二区三区在线 | 六月综合激情 | 一区二区在线不卡 | 2022国产91精品久久久久久 | 日本高清视频www夜色资源网 | 欧美日韩在线免费观看 | 日韩在线不卡一区 | 精品欧美一区二区精品久久久 | 美女超碰| 免费看h网站 | 天堂中文资源在线8 | 欧美国产一区二区 | 亚洲日本天堂在线 | 一本一本大道香蕉久在线精品 | 激情亚洲 | 黄色成年在线观看 | 天天碰天天摸天天操 | 久久精品亚洲精品 | 国产毛片av | 综合精品| 欧美一区二区三区免费不卡 | 久久久青青草 | 国产伦精品一区二区三区精品视频 | 日本小网站 | 天天色踪合 |