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條評論
主站蜘蛛池模板: 日韩高清免费在线观看 | 国产99久久久久久免费看 | 丁香花成人另类小说 | 四虎影片国产精品8848 | 亚洲成人动漫在线观看 | 国产一区二区久久精品 | 人人干操| 成人av一区二区三区 | 国产精品区一区二区三 | 国产高清在线精品一区二区三区 | 久久亚洲国产欧洲精品一 | 性欧美xxxx极品摘花 | 久久精品天堂 | 嫩草影院在线观看网站成人 | 成人黄色免费 | 香蕉草草久在视频在线播放 | wwwav在线 | 欧美激情欧美激情在线五月 | 国产在线永久免费 | 欧美精品午夜 | 国产精品免费播放 | 桃花综合 | 欧美一区二区在线播放 | 日日碰 | 亚洲日本久久久午夜精品 | 日韩中文在线观看 | 中文字幕亚洲欧美 | 色狠狠色综合吹潮 | 日韩av免费看 | 91在线视频播放 | 午夜电影通 | 精品一区二区三区在线视频 | 久久成人在线视频 | 九九热在线免费观看 | 亚洲 中文 欧美 日韩 在线观看 | 久草www| 天天躁日日躁很很躁2022 | 狠狠狠狠狠狠狠狠狠狠 | 免费的黄网站男人的天堂 | 久久精品国产99国产精品澳门 | 79thz.com|