天天看點

Python3 與 C# 面向對象之~異常相關

周末多碼文,昨天晚上一篇,今天再來一篇:

線上程式設計:https://mybinder.org/v2/gh/lotapp/BaseCode/master

線上預覽:http://github.lesschina.com/python/base/oop/3.異常相關.html

代碼褲子:https://github.com/lotapp/BaseCode/tree/master/python/2.OOP/4.Exception

又到了開新課的時候了,小明同學這次提前預習了知識,乘着老師還沒來就在黑闆上寫下了這段Code:

In [1]:

小潘同學剛進來就看見了,自語道:“<code>try...except</code>捕獲異常誰不會?就會這麼屁點東西還好意思秀,切~ 我給你把 格式補全”

于是乘着小明上廁所的時候,擦掉小明的Code,自己寫了一段高大上的Code:

In [2]:

這時候小明和老師一起進來了,同學們隐約間都聽到小明的自誇聲:“老師,我可好了,提前預習并且還寫了個demo在黑闆上呢~”

老師一進門看着黑闆就笑了,同學們也笑成一片。小明心想,咦~難道我寫錯了?定眼一看黑闆,氣呼呼的回座位了

<code>else</code>可以不寫,不過我們 基本上還是會寫的,畢竟可以知道是真的沒有錯誤,而不是屏蔽了錯誤

老師很欣慰,覺得這個班真有意思,大家學習空前熱情,為了照顧小明,老師反問道:“有誰知道 多個異常怎麼處理?”

小明飛快的舉手并把黑闆上内容擦完,寫下了如下代碼:

In [3]:

老師問了小明一聲,有幾個輸出?

小明驕傲的說道:“兩個,我寫了兩個異常處理,當然都執行了”

同學們又笑了,小潘調侃的說了句:“一看就知道去年C#沒好好學,這不都一樣嘛,遇到異常下面代碼還執行嗎?用腦子好好想想”

當我們認為某些代碼可能會出錯時,就可以用<code>try</code>來運作這段代碼,如果執行出錯,則後續代碼不會繼續執行,而是直接跳轉至<code>except</code>語句塊,執行完<code>except</code>後,如果有<code>finally</code>語句塊,則執行finally語句塊

小明又尴尬了。。。

老師再次幫小明圓了個場:“已經很不簡單了,就是最後小得意的時候口誤了,那小明同學你知道Python裡面多異常有個便捷寫法嗎?”

小明趕緊拿起粉筆刷刷刷的寫完,然後說道:“of course”

In [4]:

老師趕緊誇了誇小明,心想,哎呦喂終于把這難纏的家夥弄回座位了。

小明走前還不忘說一句:“簡寫的時候注意格式哦,是 元組 不是逗号分隔”

老師這堂課很輕松,大家都預習了而且内容也比較簡單。

接着以提問的方式問道:“小潘同學,你知道異常的基類是什麼嗎?如果要捕獲所有異常該怎麼做呢?”

小潘站起來說道:“是<code>BaseException</code>”

老師擴充道:“所有的錯誤類型都繼承自<code>BaseException</code>,是以在使用<code>except</code>時需要注意的是,它不但捕獲該類型的錯誤,還把其子類也一起捕獲了”

是以一般在捕獲異常的時候 把子類異常放在前面,父類放在後面

看如下代碼:

In [5]:

如果把父類放第一個,那麼<code>ZeroDivisionError</code>永遠也不會被執行了,其實你如果裝了 代碼規範提示插件會提示你的

可以參考我之前寫的 vscode設定python3調試環境的擴充部分

來個通用異常捕獲的簡寫(官方不推薦使用簡寫):

In [6]:

老師繼續講到,我們來看一個場景,現在很多線上編輯器,你在他們那些編輯框裡寫下了代碼也是有異常抛出的,這是怎麼處理的呢?

微軟有開源代碼編輯器比較受歡迎(VSCode的一部分):monaco-editor

提示一下,如果真的要做線上編輯器,記得考慮一下<code>fork炸彈</code>,這個其實也是很老的東西了,程式員基本上都應該接觸過了

我們繼續,像C#是用<code>thorw</code>抛出異常,那Python怎麼 <code>捕獲異常後再抛出</code> 呢?怎麼<code>自定義異常</code> 呢?

繼續往下看:

In [7]:

In [8]:

異常這一塊基本上講完了(<code>logging</code>子產品後面會說)有什麼補充的可以說的^_^

小明又進行了C#的代碼轉換,怎麼看都覺得還是C#簡單啊,根本不用說啥,代碼一貼就秒懂了。。。

你可以自定義異常類,繼承Exception即可,對了C#裡面也是有finally的

現在一些需要finally的地方基本上都被using(){}接管了,是以特定場景會使用

先這樣了

作者:毒逆天

出處:https://www.cnblogs.com/dotnetcrazy

打賞:<b>18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z</b>

本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!