摘要:程序中的錯(cuò)誤處理有多種方式,一類(lèi)是約定好錯(cuò)誤碼,然后根據(jù)返回的錯(cuò)誤碼來(lái)判斷是否發(fā)生錯(cuò)誤,以及錯(cuò)誤的原因。比較成熟的做法是這一套錯(cuò)誤處理機(jī)制??梢杂脕?lái)處理沒(méi)有的情況是無(wú)論有無(wú)錯(cuò)誤都會(huì)執(zhí)行。
程序中的錯(cuò)誤處理有多種方式,一類(lèi)是約定好錯(cuò)誤碼,然后根據(jù)返回的錯(cuò)誤碼來(lái)判斷是否發(fā)生錯(cuò)誤,以及錯(cuò)誤的原因。
但是這么做容易將正確的返回值和錯(cuò)誤碼混在一起,必須要寫(xiě)很多代碼來(lái)區(qū)分,非常不方便。
另外一旦出錯(cuò),還需要一級(jí)一級(jí)往上報(bào),知道有一級(jí)可以處理它。
比較成熟的做法是try...except...finally...這一套錯(cuò)誤處理機(jī)制。該機(jī)制不會(huì)干擾正常的返回值。同時(shí)也無(wú)需一級(jí)一級(jí)手動(dòng)上報(bào),而是只需要有一級(jí)捕獲并處理即可。
代碼:
try: print open("Demo.py", "r") n = 1 / 0 except ZeroDivisionError, e: print "zeroDivisionError", e except ValueError, e: print "ValueError", e else: print "No Error catched" finally: print "finally"
使用錯(cuò)誤處理有幾個(gè)點(diǎn)需要注意:
可以寫(xiě)多個(gè)except用于捕獲多個(gè)exception
父類(lèi)exception可以捕獲子類(lèi)的exception,已經(jīng)被捕獲的exception不會(huì)再被傳遞給其他exception。
可以用else來(lái)處理沒(méi)有exeption的情況
finally是無(wú)論有無(wú)錯(cuò)誤都會(huì)執(zhí)行。
Build-in Exception的種類(lèi)Python(2.x)內(nèi)置Exception的繼承關(guān)系見(jiàn)下圖:
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
當(dāng)然我們也可以自定義一個(gè)類(lèi),例如:
class MyException(StandardException): pass
當(dāng)然,推薦使用Build-in的Exception。在Build-in的Exception中找不到我們所需要的Exception的時(shí)候,我們才自定義Exception。
拋出自定義Exception使用以下語(yǔ)法:
raise MyException("this is my Exception")Exception的記錄
在測(cè)試代碼中,我們對(duì)Exception的處理中可以直接print exception。但是實(shí)際生產(chǎn)代碼中直接打印log可能不是很妥。我們可以通過(guò)簡(jiǎn)單的配置使用logging.exception(msg)將錯(cuò)誤打印到日志中。
如何正確使用python內(nèi)置的logging模塊,可以另開(kāi)一篇文章介紹。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38325.html
showImg(http://source1.godblessyuan.com/blog_head_first_python_chapter_4_20150426.jpg); 其實(shí)持久存儲(chǔ)不僅僅包含文件,還包括數(shù)據(jù)庫(kù)等,本章先介紹一部分,先熟悉一下。 熟悉python數(shù)據(jù) #!/usr/bin/python # -*- coding: utf-8 -*- man = [] other =...
摘要:異常即使程序的語(yǔ)法是正確的,但是在運(yùn)行的時(shí)候,也有可能發(fā)生錯(cuò)誤,運(yùn)行期監(jiān)測(cè)到的錯(cuò)誤稱為異常。此時(shí)可以打印出錯(cuò)誤信息,然后再次把異常拋出。這個(gè)子句將在子句沒(méi)有發(fā)生任何異常的時(shí)候執(zhí)行。異常類(lèi)繼承自,可以直接繼承,或者間接繼承。 1. 語(yǔ)法錯(cuò)誤 Python 的語(yǔ)法錯(cuò)誤被稱為解析錯(cuò),語(yǔ)法分析器會(huì)指出出錯(cuò)的代碼行,并且在最先找到的錯(cuò)誤的位置標(biāo)記一個(gè)小小的箭頭。 >>> while True ...
摘要:增加邏輯來(lái)處理首先通過(guò)觀察方法對(duì)于不同的數(shù)據(jù)返回的值是不同的。所以需要加一些標(biāo)記,標(biāo)識(shí)數(shù)據(jù)不符合期望的格式時(shí)會(huì)出現(xiàn)數(shù)據(jù)無(wú)法正常訪問(wèn)時(shí)會(huì)出現(xiàn)。 1.介紹基礎(chǔ)文件,輸入,輸出 open() 打開(kāi)文件,一次傳入一行數(shù)據(jù),可以結(jié)合for循環(huán)和readline()來(lái)使用 close() 用來(lái)關(guān)閉open打開(kāi)的文件 the_file = open(sketch.txt) the_file....
摘要:但是在調(diào)試之后,我們還需要手動(dòng)刪除語(yǔ)句,比較麻煩。關(guān)閉后,語(yǔ)句就不再生效。的好處有很多,一個(gè)是可以制定輸出特定級(jí)別的信息。我們可以用對(duì)進(jìn)行簡(jiǎn)單的配置。小于該的都會(huì)被忽略。但是在處理很長(zhǎng)的代碼的時(shí)候,顯得效率低下。 我們?cè)趯?xiě)代碼的時(shí)候,往往會(huì)有一大堆錯(cuò)誤。我們?cè)撊绾握{(diào)試呢? 用print語(yǔ)句打印 我們可以用print語(yǔ)句打印我們想要的內(nèi)容,然后在輸出中查看。 print hah 但是在調(diào)...
摘要:空函數(shù)如果想要定義一個(gè)什么都不做的函數(shù),那么可以用語(yǔ)句。為函數(shù)添加參數(shù)檢查我們對(duì)作一些改寫(xiě)。此時(shí)調(diào)用函數(shù)時(shí)傳入錯(cuò)誤的參數(shù)則會(huì)拋出。函數(shù)返回多個(gè)值支持返回多個(gè)值。 python中定義函數(shù)的關(guān)鍵詞是def,例如定義一個(gè)叫my_function的函數(shù)我們可以這么定義, 其中括號(hào)內(nèi)的x,y為傳入的參數(shù)。 def my_function(): # function body 返回值 函數(shù)...
閱讀 2532·2021-10-11 10:59
閱讀 2712·2021-09-22 15:49
閱讀 2647·2021-08-13 13:25
閱讀 1290·2019-08-30 13:14
閱讀 2392·2019-08-29 18:45
閱讀 2999·2019-08-29 18:36
閱讀 1490·2019-08-29 13:21
閱讀 1163·2019-08-26 11:44