首頁  >  文章  >  後端開發  >  python學習筆記-錯誤處理

python學習筆記-錯誤處理

黄舟
黄舟原創
2017-01-17 14:17:591031瀏覽

程式中的錯誤處理有多種方式,一類是約定好錯誤碼,然後根據傳回的錯誤碼來判斷是否發生錯誤,以及錯誤的原因。


但是這麼做容易將正確的回傳值和錯誤碼混在一起,必須要寫很多程式碼來區分,非常不方便。另外一旦出錯,還需要一級一級往上報,知道有一級可以處理它。


比較成熟的做法是try...except...finally...這套錯誤處理機轉。此機制不會幹擾正常的回傳值。同時也無需一級一級手動上報,而是只需要有一級捕獲並處理即可。


程式碼:

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"

使用錯誤處理有幾個點需要注意:


可以寫多個except用於捕獲多個exception

ception


,已經被捕獲的exception不會再傳遞給其他exception。


可以用else來處理沒有exeption的情況


finally是無論有沒有錯誤都會執行。

Build-in Exception的種類



Python(2.x)內建Exception的繼承關係請見下圖:

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

當然我們也可以推薦一個類,例如:

class MyException(StandardException):

raise MyException("this is my Exception")

in的Exception。在Build-in的Exception中找不到我們所需要的Exception的時候,才自訂Exception。


拋出自定義Exception使用以下語法:

rrreee

在測試程式碼中,我們對Exception的處理中可以直接print exception。但是實際生產代碼中直接列印log可能不是很妥。我們可以透過簡單的配置使用logging.exception(msg)將錯誤列印到日誌中。如何正確使用python內建的logging模組,可以另開一篇文章介紹。

以上就是python學習筆記-錯誤處理的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn