這篇文章主要講解了“Python異常處理體系結(jié)構(gòu)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python異常處理體系結(jié)構(gòu)”吧!
創(chuàng)新互聯(lián)建站主營青山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),青山h5小程序制作搭建,青山網(wǎng)站營銷推廣歡迎青山等地區(qū)企業(yè)咨詢
Python內(nèi)建異常體系結(jié)構(gòu)
The class hierarchy for built-in exceptions is:
BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StandardError | +-- BufferError | +-- ArithmeticError | | +-- FloatingPointError | | +-- OverflowError | | +-- ZeroDivisionError | +-- AssertionError | +-- AttributeError | +-- EnvironmentError | | +-- IOError | | +-- OSError | | +-- WindowsError (Windows) | | +-- VMSError (VMS) | +-- EOFError | +-- ImportError | +-- LookupError | | +-- IndexError | | +-- KeyError | +-- MemoryError | +-- NameError | | +-- UnboundLocalError | +-- ReferenceError | +-- RuntimeError | | +-- NotImplementedError | +-- SyntaxError | | +-- IndentationError | | +-- TabError | +-- SystemError | +-- TypeError | +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning
捕獲異常的方式
方法一:捕獲所有的異常
''' 捕獲異常的***種方式,捕獲所有的異常 ''' try: a = b b = c except Exception,data: print Exception,":",data '''輸出:<type 'exceptions.Exception'> : local variable 'b' referenced before assignment '' |
方法二:采用traceback模塊查看異常,需要導(dǎo)入traceback模塊
''' 捕獲異常的第二種方式,使用traceback查看異常 ''' try: a = b b = c except: print traceback.print_exc() '''輸出: Traceback (most recent call last): File "test.py", line 20, in main a = b UnboundLocalError: local variable 'b' referenced before assignmen |
方法三:采用sys模塊回溯***的異常
''' 捕獲異常的第三種方式,使用sys模塊捕獲異常 ''' try: a = b b = c except: info = sys.exc_info() print info print info[0] print info[1] '''輸出: (<type 'exceptions.UnboundLocalError'>, UnboundLocalError("local variable 'b' referenced before assignment",), <traceback object at 0x00D243F0>) <type 'exceptions.UnboundLocalError'> local variable 'b' referenced before assignment ''' |
Python異常體系介紹
Python的異常處理可以向用戶準(zhǔn)確反饋出錯信息,所有異常都是基類Exception的子類。自定義異常都是從基類Exception中繼承。Python自動將所有內(nèi)建的異常放到內(nèi)建命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。
可以使用的語句結(jié)構(gòu)形式:
方式一:使用try,except語句來捕獲異常,可以有無數(shù)個except語句來處理異常,如果所有except語句都沒捕獲到,則拋出異常到調(diào)用此方法的函數(shù)內(nèi)處理,直到系統(tǒng)的主函數(shù)來處理。
使用except子句需要注意的事情,就是多個except子句截獲異常時,如果各個異常類之間具有繼承關(guān)系,則子類應(yīng)該寫在前面,否則父類將會直接截獲子類異常。放在后面的子類異常也就不會執(zhí)行到了。
try: block except [excpetion,[data...]]: block except [excpetion,[data...]]: block except [excpetion,[data...]]: block |
方式二:當(dāng)沒有異常發(fā)生的時候執(zhí)行else語句
try: block except [excpetion,[data...]]: block else: block |
方式三:finally 語句,不管有沒有發(fā)生異常都將執(zhí)行finally語句塊
例如我們在python中打開一個文件進(jìn)行讀寫操作,我在操作過程中不管是否出現(xiàn)異常,最終都是要把該文件關(guān)閉的。
try: block finally: block |
方式四:try,except,finally
try: block except: block finally: block |
引發(fā)異常
raise [exception[,data]]
在Python中,要想引發(fā)異常,最簡單的形式就是輸入關(guān)鍵字raise,后跟要引發(fā)的異常的名稱。
異常名稱標(biāo)識出具體的類:Python異常是那些類的對象。執(zhí)行raise語句時,Python會創(chuàng)建指定的異常類的一個對象。
raise語句還可指定對異常對象進(jìn)行初始化的參數(shù)。為此,請?jiān)诋惓n惖拿Q后添加一個逗號以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個元組)。
例:
try: raise MyError #自己拋出一個異常 except MyError: print 'a error' raise ValueError,’invalid argument’ |
捕捉到的內(nèi)容為:
type = VauleError message = invalid argument |
異常處理的一些其它用途
除了處理實(shí)際的錯誤條件之外,對于異常還有許多其它的用處。在標(biāo)準(zhǔn) Python 庫中一個普通的用法就是試著導(dǎo)入一個模塊,然后檢查是否它能使用。
導(dǎo)入一個并不存在的模塊將引發(fā)一個 ImportError 異常。你可以使用這種方法來定義多級別的功能――依靠在運(yùn)行時哪個模塊是有效的,或支持多種平臺 (即平臺特定代碼被分離到不同的模塊中)。
你也能通過創(chuàng)建一個從內(nèi)置的 Exception 類繼承的類定義你自己的異常,然后使用 raise 命令引發(fā)你的異常。如果你對此感興趣,請看進(jìn)一步閱讀的部分。
下面的例子演示了如何使用異常支持特定平臺功能。代碼來自 getpass 模塊,一個從用戶獲得口令的封裝模塊。獲得口令在 UNIX、Windows 和 Mac OS 平臺上的實(shí)現(xiàn)是不同的,但是這個代碼封裝了所有的不同之處。
例支持特定平臺功能
# Bind the name getpass to the appropriate function try: import termios, TERMIOS except ImportError: try: import msvcrt except ImportError: try: from EasyDialogs import AskPassword except ImportError: getpass = default_getpass else: getpass = AskPassword else: getpass = win_getpass else: getpass = unix_getpass |
termios 是 UNIX 獨(dú)有的一個模塊,它提供了對于輸入終端的底層控制。
如果這個模塊無效 (因?yàn)樗辉谀愕南到y(tǒng)上,或你的系統(tǒng)不支持它),則導(dǎo)入失敗,Python 引發(fā)我們捕捉的 ImportError 異常。
OK,我們沒有 termios,所以讓我們試試 msvcrt,它是 Windows 獨(dú)有的一個模塊,可以提供在 Microsoft Visual C++ 運(yùn)行服務(wù)中的許多有用的函數(shù)的一個API。如果導(dǎo)入失敗,
Python 會引發(fā)我們捕捉的 ImportError 異常。
如果前兩個不能工作,我們試著從 EasyDialogs 導(dǎo)入一個函數(shù),它是 Mac OS 獨(dú)有的一個模塊,提供了各種各樣類型的彈出對話框。再一次,如果導(dǎo)入失敗,Python 會引發(fā)一個我們捕捉的 ImportError 異常。
這些平臺特定的模塊沒有一個有效 (有可能,因?yàn)?Python 已經(jīng)移植到了許多不同的平臺上了),所以我們需要回頭使用一個缺省口令輸入函數(shù) (這個函數(shù)定義在 getpass 模塊中的別的地方)。注意我們在這里所做的:我們將函數(shù) default_getpass 賦給變量 getpass。如果你讀了官方 getpass 文檔,它會告訴你 getpass 模塊定義了一個 getpass 函數(shù)。它是這樣做的:通過綁定 getpass 到正確的函數(shù)來適應(yīng)你的平臺。然后當(dāng)你調(diào)用 getpass 函數(shù)時,你實(shí)際上調(diào)用了平臺特定的函數(shù),是這段代碼已經(jīng)為你設(shè)置好的。你不需要知道或關(guān)心你的代碼正運(yùn)行在何種平臺上;只要調(diào)用 getpass,則它總能正確處理。
一個 try...except 塊可以有一條 else 子句,就像 if 語句。如果在 try 塊中沒有異常引發(fā),然后 else 子句被執(zhí)行。在本例中,那就意味著如果 from EasyDialogs import AskPassword 導(dǎo)入可工作,所以我們應(yīng)該綁定 getpass 到 AskPassword 函數(shù)。其它每個 try...except 塊有著相似的 else 子句,當(dāng)我們發(fā)現(xiàn)一個 import 可用時,就綁定 getpass 到適合的函數(shù)。
自定義異常類,繼承Exception類及其子類
class MyError( ArithmeticError ): pass class MyError2 ( Exception ): pass |
感謝各位的閱讀,以上就是“Python異常處理體系結(jié)構(gòu)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Python異常處理體系結(jié)構(gòu)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
當(dāng)前文章:Python異常處理體系結(jié)構(gòu)
轉(zhuǎn)載源于:http://m.rwnh.cn/article36/ggdcsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航、營銷型網(wǎng)站建設(shè)、電子商務(wù)、ChatGPT、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)