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