




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
Python的異常處理能力是很強大的,可向用戶準確反饋出錯信息。本文將對Python異常處理體系進行簡單介紹。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=bb=cexceptException,data:printException,:,data輸出:typeexceptions.Exception:localvariablebreferencedbeforeassignment方法二:采用traceback模塊查看異常,需要導入traceback模塊捕獲異常的第二種方式,使用traceback查看異常try:a=bb=cexcept:printtraceback.print_exc()輸出:Traceback(mostrecentcalllast):Filetest.py,line20,inmaina=bUnboundLocalError:localvariablebreferencedbeforeassignmen方法三:采用sys模塊回溯最后的異常捕獲異常的第三種方式,使用sys模塊捕獲異常try:a=bb=cexcept:info=sys.exc_info()printinfoprintinfo0printinfo1輸出:(typeexceptions.UnboundLocalError,UnboundLocalError(localvariablebreferencedbeforeassignment,),tracebackobjectat0x00D243F0)typeexceptions.UnboundLocalErrorlocalvariablebreferencedbeforeassignmentPython異常體系介紹Python的異常處理可以向用戶準確反饋出錯信息,所有異常都是基類Exception的子類。自定義異常都是從基類Exception中繼承。Python自動將所有內(nèi)建的異常放到內(nèi)建命名空間中,所以程序不必導入exceptions模塊即可使用異常??梢允褂玫恼Z句結(jié)構(gòu)形式:方式一:使用try,except語句來捕獲異常,可以有無數(shù)個except語句來處理異常,如果所有except語句都沒捕獲到,則拋出異常到調(diào)用此方法的函數(shù)內(nèi)處理,直到系統(tǒng)的主函數(shù)來處理。使用except子句需要注意的事情,就是多個except子句截獲異常時,如果各個異常類之間具有繼承關系,則子類應該寫在前面,否則父類將會直接截獲子類異常。放在后面的子類異常也就不會執(zhí)行到了。try:blockexceptexcpetion,data.:blockexceptexcpetion,data.:blockexceptexcpetion,data.:block方式二:當沒有異常發(fā)生的時候執(zhí)行else語句try:blockexceptexcpetion,data.:blockelse:block方式三:finally 語句,不管有沒有發(fā)生異常都將執(zhí)行finally語句塊例如我們在python中打開一個文件進行讀寫操作,我在操作過程中不管是否出現(xiàn)異常,最終都是要把該文件關閉的。try:blockfinally:block方式四:try,except,finallytry:blockexcept:blockfinally:block引發(fā)異常raise exception,data在Python中,要想引發(fā)異常,最簡單的形式就是輸入關鍵字raise,后跟要引發(fā)的異常的名稱。異常名稱標識出具體的類:Python異常是那些類的對象。執(zhí)行raise語句時,Python會創(chuàng)建指定的異常類的一個對象。raise語句還可指定對異常對象進行初始化的參數(shù)。為此,請在異常類的名稱后添加一個逗號以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個元組)。例:try:raiseMyError#自己拋出一個異常exceptMyError:printaerrorraiseValueError,invalidargument捕捉到的內(nèi)容為:type=VauleErrormessage=invalidargument異常處理的一些其它用途除了處理實際的錯誤條件之外,對于異常還有許多其它的用處。在標準 Python 庫中一個普通的用法就是試著導入一個模塊,然后檢查是否它能使用。導入一個并不存在的模塊將引發(fā)一個 ImportError 異常。你可以使用這種方法來定義多級別的功能依靠在運行時哪個模塊是有效的,或支持多種平臺 (即平臺特定代碼被分離到不同的模塊中)。你也能通過創(chuàng)建一個從內(nèi)置的 Exception 類繼承的類定義你自己的異常,然后使用 raise 命令引發(fā)你的異常。如果你對此感興趣,請看進一步閱讀的部分。下面的例子演示了如何使用異常支持特定平臺功能。代碼來自 getpass 模塊,一個從用戶獲得口令的封裝模塊。獲得口令在 UNIX、Windows 和 Mac OS 平臺上的實現(xiàn)是不同的,但是這個代碼封裝了所有的不同之處。例支持特定平臺功能#Bindthenamegetpasstotheappropriatefunctiontry:importtermios,TERMIOSexceptImportError:try:importmsvcrtexceptImportError:try:fromEasyDialogsimportAskPasswordexceptImportError:getpass=default_getpasselse:getpass=AskPasswordelse:getpass=win_getpasselse:getpass=unix_getpasstermios 是 UNIX 獨有的一個模塊,它提供了對于輸入終端的底層控制。如果這個模塊無效 (因為它不在你的系統(tǒng)上,或你的系統(tǒng)不支持它),則導入失敗,Python 引發(fā)我們捕捉的 ImportError 異常。OK,我們沒有 termios,所以讓我們試試 msvcrt,它是 Windows 獨有的一個模塊,可以提供在 Microsoft Visual C+ 運行服務中的許多有用的函數(shù)的一個API。如果導入失敗,Python 會引發(fā)我們捕捉的 ImportError 異常。如果前兩個不能工作,我們試著從 EasyDialogs 導入一個函數(shù),它是 Mac OS 獨有的一個模塊,提供了各種各樣類型的彈出對話框。再一次,如果導入失敗,Python 會引發(fā)一個我們捕捉的 ImportError 異常。這些平臺特定的模塊沒有一個有效 (有可能,因為 Python 已經(jīng)移植到了許多不同的平臺上了),所以我們需要回頭使用一個缺省口令輸入函數(shù) (這個函數(shù)定義在 getpass 模塊中的別的地方)。注意我們在這里所做的:我們將函數(shù) default_getpass 賦給變量 getpass。如果你讀了官方 getpass 文檔,它會告訴你 getpass 模塊定義了一個 getpass 函數(shù)。它是這樣做的:通過綁定 getpass 到正確的函數(shù)來適應你的平臺。然后當你調(diào)用 getpass 函數(shù)時,你實際上調(diào)用了平臺特定的函數(shù),是這段代碼已經(jīng)為你設置好的。你不需要知道或關心你的代碼正運行在何種平臺上;只要調(diào)用 getpass,則它總能正確處理。一個 try.except 塊可以有一條 else 子句,就像 if 語句。如果在 try 塊中沒有異常引發(fā),然后 else 子句被執(zhí)行。在本例中,那就意味著如果 from EasyDialogs impo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年產(chǎn)品售后服務策劃合作協(xié)議書標準格式
- 2025年租約提前解除協(xié)議示例
- 2025年商品混凝土運輸合作協(xié)議模板
- 2025年企業(yè)員工傷亡賠償策劃諒解協(xié)議指南
- 2025年項目策劃方與投資協(xié)議草案
- 雙元制教育模式在產(chǎn)教共融中的應用
- 產(chǎn)教深度融合對人才培養(yǎng)模式的影響
- 精準農(nóng)業(yè)技術提升油菜種植效益
- 構(gòu)建語文教學新形態(tài)的面臨的問題、機遇與挑戰(zhàn)
- 社交媒體時代出版行業(yè)的用戶體驗升級
- AI驅(qū)動敦煌石窟壁畫色彩提取及服裝設計創(chuàng)新研究
- 新生兒體格測量護理規(guī)范
- 2025年水利安全員C證考前通關必練題庫-含答案
- 超星爾雅學習通《化學與中國文明(復旦大學)》2025章節(jié)測試附答案
- 2025年建筑制圖試題庫及答案
- 勞動仲裁申請書電子版模板
- 2024北師大實驗中學丘成桐少年班選拔試題出爐
- 《建筑安全與耐久性》課件
- 《卓越服務技巧》課件
- 2025年事業(yè)單位考試(綜合管理類A類)職業(yè)能力傾向測驗試題及解答參考
- 2025年中考物理總復習《壓強》專項測試卷含答案
評論
0/150
提交評論