想通過python面試環節,必須懂得異常原理

2021-03-02 魯德

異常定義

異常即是一個事件,該事件會在程序執行過程中發生,影響程序的正常執行。我們先通過一個例子來了解代碼中引入異常處理的原因。

 

print('Start')a=10b=0print(a/b)print('End')

執行結果

Traceback(most recent call last):

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 4,in <module>

    print(a/b)

ZeroDivisionError:division by zero

Start

Processfinished with exit code 1

大家可以看到代碼出現了問題,這個結果是可以預見的,但是End並沒有成功列印,這說明了print('End')語句沒有被執行,所以程序中一旦出現了異常,那麼異常點後面的語句是不會被執行的!

 我們可以利用條件語句來解決這個問題,代碼如下:

print('Start')a=10b=0if b!=0:    print(a/b)print('End')

我們也可以通過python的異常處理機制來解決這個問題。在python中捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。語法:try....except的語法,代碼如下:

print('Start')try:   a=10   b=0   print(a / b)except:    print("catch exception")
print('End')

運行結果:

Start

catchexception

End

大家可以看到try中的代碼print(a / b)出了異常被except捕獲,然後執行了print("catch exception"),最後程序正常執行完畢!

講到這裡可能有的同學會問,明明可以用條件語句就可以解決的問題,為什麼還要引入異常機制呢?最簡單的解釋就是,用異常機制會大大的減少代碼量,這個例子比較簡單大家可能體會不到,在實際編碼中try裡面是會有很多行代碼的,只要有錯誤那麼就會被catch住!如果使用條件語句,那麼就需要在多行代碼中都進行判斷,這個代碼量可想而知!

 

異常的類型

異常也是分種類的,處理不同類型的錯誤,會使用不同的異常類型,python的標準異常包括:

異常名稱

描述

BaseException

所有異常的基類

SystemExit

解釋器請求退出

KeyboardInterrupt

用戶中斷執行(通常是輸入^C)

Exception

常規錯誤的基類

StopIteration

迭代器沒有更多的值

GeneratorExit

生成器(generator)發生異常來通知退出

StandardError

所有的內建標準異常的基類

ArithmeticError

所有數值計算錯誤的基類

FloatingPointError

浮點計算錯誤

OverflowError

數值運算超出最大限制

ZeroDivisionError

除(或取模)零 (所有數據類型)

AssertionError

斷言語句失敗

AttributeError

對象沒有這個屬性

EOFError

沒有內建輸入,到達EOF  標記

EnvironmentError

作業系統錯誤的基類

IOError

輸入/輸出操作失敗

OSError

作業系統錯誤

WindowsError

系統調用失敗

ImportError

導入模塊/對象失敗

LookupError

無效數據查詢的基類

IndexError

序列中沒有此索引(index)

KeyError

映射中沒有這個鍵

MemoryError

內存溢出錯誤(對於Python  解釋器不是致命的)

NameError

未聲明/初始化對象 (沒有屬性)

UnboundLocalError

訪問未初始化的本地變量

ReferenceError

弱引用(Weak reference)試圖訪問已經垃圾回收了的對象

RuntimeError

一般的運行時錯誤

NotImplementedError

尚未實現的方法

SyntaxError

Python 語法錯誤

IndentationError

縮進錯誤

TabError

Tab 和空格混用

SystemError

一般的解釋器系統錯誤

TypeError

對類型無效的操作

ValueError

傳入無效的參數

UnicodeError

Unicode 相關的錯誤

UnicodeDecodeError

Unicode 解碼時的錯誤

UnicodeEncodeError

Unicode 編碼時錯誤

UnicodeTranslateError

Unicode 轉換時錯誤

Warning

警告的基類

DeprecationWarning

關於被棄用的特徵的警告

FutureWarning

關於構造將來語義會有改變的警告

OverflowWarning

舊的關於自動提升為長整型(long)的警告

PendingDeprecationWarning

關於特性將會被廢棄的警告

RuntimeWarning

可疑的運行時行為(runtime behavior)的警告

SyntaxWarning

可疑的語法的警告

UserWarning

用戶代碼生成的警告

 使用不同類別的異常無法捕獲非自身種類的異常,例如使用IOError是無法捕獲ZeroDivisionError的,代碼如下:

print('Start')try:  a=10  b=0print(a / b)except IOError:     print("catch exception")print('End')

運行結果

Start

Traceback (most recent calllast):

 File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 5,in <module>

    print(a / b)

ZeroDivisionError: division byzero

 

使用except可以帶多種異常類型

try:

    正常的操作

   ..

except(Exception1,Exception2,...ExceptionN):

   發生以上多個異常中的一個,執行這塊代碼

   ..

 

try...except BaseException as msg: 輸出異常信息

例如

print('Start')try:    a = 10    b = 0    print(a / b)exceptBaseException as msg:    print(msg)print('End')

輸出:

Start

division by zero

End

  

try...except...finally

print('Start')try:    a = 10    b = 0    print(a / b)exceptIOError as msg:    print(msg)
finally:    print("finally")print('End')

輸出:

Start

Traceback (most recent call last):

finally

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 6,in <module>

    print(a / b)

ZeroDivisionError: division by zero

 

raise拋出異常

raise語句允許程式設計師強制發生指定的異常。如果你需要確定是否引發了異常但不打算處理它時可以使用!

例如:

def  exp_fuc():    raise IOError
exp_fuc()print('End')


運行結果

Traceback(most recent call last):

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 7,in <module>

    exp_fuc()

  File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 5,in exp_fuc

    raise IOError

OSError

可以看到代碼拋出了IOError,由於沒有被捕獲,所以print('End')沒有被執行

 

自定義異常

程序可以通過創建新的異常類來命名它們自己的異常。異常通常應該直接或間接地從Exception 類派生。

classMyError(Exception):
   def __init__(self, value): self.value = value
   def __str__(self): return repr(self.value)
try:      raise MyError('my error')except MyError as e: print ('My exception:', e.value)

運行結果

Myexception: my error

              魯德學員成長小故事

不經意間2020年已過大半,今年你收穫了什麼?

可能你在過去的歲月裡有過迷茫,薪資不上不下,職業發展道路不知道該如何規劃?IT這條路還能走多遠?

我還要堅持走下去嗎?

其實這樣的糾結,焦慮不僅僅是你,很多IT人員都遇到過這樣的經歷

魯德的黃同學,在來魯德時也同樣有這樣的困惑,她曾經想放棄這個行業去自己開小店

從去年諮詢後整整糾結了2個月的時間,後面果斷選擇先學習技能,因為仔細想後覺得開店的風險要遠遠大於做技術的風險

學習是穩賺不賠的,而創業需要勇氣和資金並且還有巨大的投資風險

用她的一句話就是:創業如果失敗至少我還有技術,在最適合學習的時候不要浪費了時間

終於通過將近半年多學習+技術的沉澱,收穫了技能上的突破,與之而來的是薪資上的增長

通過魯德的職業規劃課也讓她更清晰接下來的職業發展方向!

恭喜【上海】全棧班黃同學,報名時11K,學完跳槽漲薪至23.5K,薪資漲幅114%

培訓前狀況

測試3年,薪資11k--技能瓶頸突出

培訓後的收穫:

薪資漲幅達到114%

【性能測試技能群】,掌握高級性能測試與分析實戰技能

【自動化測試技能群】,掌握自動化項目實戰和技能提升

【面試高薪崗位技巧群】全面熟知面試題解析和面試技巧

掃下方二維碼加老師微信進學習群

相關焦點

  • 好程式設計師Python教程分享常見的Python面試題
    好程式設計師Python教程分享常見的Python面試題,程式設計師面試難免會需要進行筆試,筆試是考驗程式設計師基礎功底的重要環節,根據很多小夥伴的面試反饋,今天總結分享了一些常見的Python面試題,想要看Python面試是不是可以順利通過,這些常見的Python面試題你應該看看。
  • python異常處理與上下文管理器
    異常處理異常與錯誤錯誤可以通過IDE或者解釋器給出提示的錯誤opentxt('a.jpg','r')語法層面沒有問題,但是自己代碼的邏輯有問題if age>18: print('未成年')異常多指在程序執行過程中,出現的未知錯誤,語法和邏輯本身是正確的。
  • Python異常處理
    問題描述大家在使用python語言寫代碼的時候難免會出一些錯誤,而才入門的朋友們往往不知道是哪裡出了錯或者不知道自己錯在哪裡、什麼錯誤。所以我們要知道是哪行代碼出錯,其次室錯誤的類型是什麼,錯在那個細節,逐步分析,從而解決錯誤並改正。
  • 聊聊python面試這件事兒
    隨便分享下我的故事.工作了幾年, 必然面過幾家. 我不是面霸, 但是也肯定有感覺特別奇葩的, 沒對上眼的, 完虐我的,勵志的, 讓我感動的. 讓我感恩的.來個趣事兒國內python圈有名的公司不多. 12年的時候覺得要從運維開發轉型為真正的開發, 面試了某知名公司S. 一直到現在我還覺得他的面試模式很好 - 初步篩選之後會發麵試題, 2個題目任選其一, 一周做好.
  • python 異常處理
    對於python來說,就是工廠類被具體工廠繼承。這樣在簡單工廠模式裡集中在工廠方法上的壓力可以由工廠方法模式裡不同的工廠子類來分擔。抽象的工廠類提供了一個創建對象的方法,也叫作工廠方法。1) 抽象工廠角色(Factory): 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的接口或者必須繼承的父類。
  • python中的異常捕獲
    無論是編程新手還是老手,都會遇到過程序報錯,終止執行的情況,對於python的報錯信息,可以分為以下兩大類語法錯誤,syntax error
  • python入門——Python中異常處理
    python大數據課堂已經開始了。想轉行大數據,數據挖掘,機器學習,人工智慧的小夥伴可以關注啦。上一篇帶大家了解了python中的I/O函數。今天我們來繼續了解python中的異常處理。調試環境以python3.6環境為例。需要代碼和demo的朋友可以搜索「欒鵬全棧」到我的CSDN博客。
  • 一文教你讀懂 Python 中的異常信息
    雖然 Python 的 Traceback 提示信息看著挺複雜,但是裡面豐富的信息,可以幫助你診斷和修復代碼中引發異常的原因,以及定位到具體哪個文件的哪行代碼出現的錯誤,所以說學會看懂 Traceback 信息是非常重要的,另外在面試的時候也經常會問到 Python 中的異常類型及其含義,那麼,接下來就讓我們對其進行詳細理解。
  • 2020Python+人工智慧學習路線圖,內附完整自學路線+視頻+工具經驗+面試篇
    文件的打開、編輯、關閉6)面向對象編程類對象、實例對象、定義類、實例化對象7)異常處理學會捕捉異常、自定義異常8)模塊和包理解模塊和包的概念並學會使用9)飛機大戰遊戲製作自己獨立完成飛機大戰遊戲3.該階段免費配套教程視頻獲取方式關注「黑馬程式設計師視頻庫」,後臺回復「Python學習路線
  • 面試到最後環節,必須注意的幾點!
    面試過別人,也被別人面試過,到了面試最後環節,貌似都是以題主所言結束,看到這個問題之前沒有深究過,因為對我來說,面試最後,隨口問下,還有什麼問題麼?基本屬於禮貌問候,現在回想下,的確有面試過程看著很不錯的人選,在最後隨口一問下,導致好印象顛覆,決定不予錄取!
  • python面試輕鬆搞定,助你搞定面試官,內附15題及答案(08期)
    小夥伴們,有沒有發現,越是好的公司面試,面試官給你的題目,全都是考你的「基本功」。下面我給大家集齊了一些面試題,拿走,不用客氣!1.__new__和__init__的區別答:這個__new__確實很少見到,先做了解吧.1. __new__是一個靜態方法,而__init__是一個實例方法.2.
  • 2018年最新Python學習路線圖(內含大綱+視頻+工具+書籍+面試)
    所以,從今天起不要再找藉口,不要再說想學Python卻沒有資源,趕快行動起來,Python等你來探索,高薪距你只差一步! 本學習路線圖不僅含有清晰的學習路線,職業成長路徑,而且放上Python教研部公布的最新視頻資源(且按照學習流程進行順序排列),更是提供了學習過程中會用到的軟體,手冊,源碼,面試題錦集等多個系列。
  • 16-python中的異常
    通過前兩天的文章14-python中的函數,15-再敘python中的函數我們對python中有關函數的知識有了系統的認識和學習,今天我們將接著來看一下python中的異常。(一)Bug的由來和分類    "Bug"一詞的原意是"昆蟲"或"蟲子";而在電腦系統或程序中隱藏著的一些未被發現的缺陷或問題,人們也叫它"bug"。
  • 第16天:Python 錯誤和異常
    如果發生的異常和 except 子句中指定的異常不匹配,則將其傳遞到外部的 try 語句中;如果沒有找到處理程序,則它是一個 未處理異常,執行將停止並顯示錯誤消息。如果 try 語句執行時沒有發生異常,那麼將執行 else 語句後的語句(如果有 else 的話),然後控制流通過整個 try 語句。
  • 我的python面試簡歷
    分享前一段我的python面試簡歷,自我介紹這些根據你自己的來寫就行,這裡著重分享下我的項目經驗
  • Python系列特別篇-錯誤和異常
    語法錯誤又稱解析錯誤,這是初學者最容易碰到的錯誤了,原因是輸入的內容Python解析器解析不通過導致的。所有異常必須派生自 (直接或者間接)BaseException 的類。>>> print(issubclass(TypeError, BaseException)TrueZeroDivisionError,NameError也一樣,都是BaseException的子類。
  • python入門學習異常處理類型
    前言異常是指在程序執行過程中發生的一個事件,影響了程序的正常執行,例如:0做了分母。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。在Java語言中我們知道異常的常用結構為try catch組成,有時也會用到finally,那麼在python中異常是如何來處理的呢?python中的異常處理1.python異常簡單語法python異常的簡單語法為try-except-else語法,注意這裡的關鍵字是except而不是Exception,這與java是有區別的。
  • python經典筆試、面試題
    一、高德軟體有限公司python試題及答案1. 在python中, list, tuple, dict, set有什麼區別, 主要應用在什麼樣的場景?類函數(@classmethod): 即類方法, 只能訪問類變量,不能訪問實例變量 , 類方法通過@classmethod裝飾器實現。成員函數 : 實例的方法, 只能通過實例進行調用,若需通過類名來調用,則應申明為類方法。屬性函數:通過@property把一個方法變成一個靜態屬性。
  • 我的 Python 面試簡歷
    python面試簡歷,自我介紹這些根據你自己的來寫就行,這裡著重分享下我的項目經驗、公司職責情況(時間倒序),不一定對每個人適用,但是有適合你的點可以借鑑我的真實經驗:(14年畢業,化工專業)14.7 -- 15.1    賣保險15.3 -- 15.11  進廠16.2 -- 17.7    UI設計(UI培訓班學習+
  • 工具 很全的 Python 面試題
    /question/19754941.format在許多方面看起來更便利.對於%最煩人的是它無法同時傳遞一個變量和元組.你可能會想下面的代碼不會有什麼問題:"hi there %s" % name但是,如果name恰好是(1,2,3),它將會拋出一個TypeError異常.為了保證它總是正確的,你必須這樣做:"hi there %s" % (name,)   # 提供一個單元素的數組而不是一個參數