python筆記--異常處理
異常處理
異常就是程序出現錯誤無法正常工作了,異常處理是通過一些方法對出現的錯誤進行捕捉,友好地顯示出來或進行相應的處理,使得程序能夠更長時間運行。
1.異常種類
常見的:
SyntaxError 語法錯誤
IndentationError 縮進錯誤
TypeError 對象類型與要求不符合
ImportError 模塊或包導入錯誤;一般路徑或名稱錯誤
KeyError 字典裏面不存在的鍵
NameError 變量不存在
IndexError 下標超出序列範圍
IOError 輸入
AttributeError 對象裏沒有屬性
KeyboardInterrupt 鍵盤接受到 Ctrl+C
Exception 通用的異常類型;一般會捕捉所有異常
查看所有的異常種類:
>>> import exceptions >>> dir(exceptions) [‘ArithmeticError‘, ‘AssertionError‘, ‘AttributeError‘, ‘BaseException‘, ‘BufferError‘, ‘BytesWarning‘, ‘DeprecationWarning‘, ‘EOFError‘, ‘EnvironmentError‘, ‘Exception‘, ‘FloatingPointError‘, ‘FutureWarning‘, ‘GeneratorExit‘, ‘IOError‘, ‘ImportError‘, ‘ImportWarning‘, ‘IndentationError‘, ‘IndexError‘, ‘KeyError‘, ‘KeyboardInterrupt‘, ‘LookupError‘, ‘MemoryError‘, ‘NameError‘, ‘NotImplementedError‘, ‘OSError‘, ‘OverflowError‘, ‘PendingDeprecationWarning‘, ‘ReferenceError‘, ‘RuntimeError‘, ‘RuntimeWarning‘, ‘StandardError‘, ‘StopIteration‘, ‘SyntaxError‘, ‘SyntaxWarning‘, ‘SystemError‘, ‘SystemExit‘, ‘TabError‘, ‘TypeError‘, ‘UnboundLocalError‘, ‘UnicodeDecodeError‘, ‘UnicodeEncodeError‘, ‘UnicodeError‘, ‘UnicodeTranslateError‘, ‘UnicodeWarning‘, ‘UserWarning‘, ‘ValueError‘, ‘Warning‘, ‘WindowsError‘, ‘ZeroDivisionError‘, ‘__doc__‘, ‘__name__‘, ‘__package__‘]
2.捕捉異常語法
try: pass #被檢查的語句 except except type,e: #except type表示要捕捉的異常種類,e是一個變量,保存了異常信息。 pass #”,e”可以寫成”as e”
例如:
>>> try: print a #a是一個未定義的變量,直接執行”print a”會報NameError異常 except NameError,e: print "Error:",e Error: name ‘a‘ is not defined
註意:
如果異常可能會出現多個種類,可以寫多個except。例如:
>>> a = ‘hello‘ >>> try: int(a) except IndexError,e: print e except KeyError,e: print e except ValueError,e: print e
如果不知道會出現什麽異常,可以使用Exception捕獲任意異常,例如:
>>> a=‘hello‘ >>> try: int(a) except Exception,e: print e
如果未捕獲到異常即異常種類不匹配,程序直接報錯,例如:
>>> a=‘hello‘ >>> try: b=int(a) except IndexError,e: print e Traceback (most recent call last): File "<pyshell#27>", line 2, in <module> b=int(a) ValueError: invalid literal for int() with base 10: ‘hello‘
捕捉異常的其他結構:
#else語句
try: pass #主代碼塊 except KeyError,e: pass else: pass # 主代碼塊執行完沒有異常,執行該塊。
#finally語句
try: pass #主代碼塊 except KeyError,e: pass finally: pass # 無論異常與否,最終都執行該塊。
#try/except/else/finally組合語句,需要註意的是else和finally都要放在except之後,而finally要放在最後。
try: pass except KeyError,e: pass else: pass finally: pass
4. 主動觸發異常
raise可以主動拋出一個異常,例如:
>>> raise NameError(‘this is an NameError‘) Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> raise NameError(‘this is an NameError‘) NameError: this is an NameError
#捕捉主動觸發的異常
>>> try: raise Exception(‘error!!!‘) except Exception,e: print e error!!!
5.自定義異常
>>> class MyException(Exception): #繼承Exception類 def __init__(self,msg): #使用Exception類的__init__方法 self.message=msg #添加一個"message"屬性,用於存放錯誤信息 def __str__(self): return self.message >>> try: raise MyException("myerror!") #主動引發自定義異常 except MyException,e: print e myerror!
6.斷言語句assert
assert用於判斷條件判斷語句是否為真,不為真則處罰異常,例如:
>>> assert 2>1 >>> assert 2<1 Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> assert 2<1 AssertionError
#添加異常描述信息:
>>> assert 2<1,"flase" Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> assert 2<1,"flase" AssertionError: flase
本文出自 “網絡技術” 博客,請務必保留此出處http://fengjicheng.blog.51cto.com/11891287/1929107
python筆記--異常處理