《转》Python学习(16)-python异常
轉(zhuǎn)自 http://www.cnblogs.com/BeginMan/p/3171445.html
一、什么是錯誤,什么是異常,它們兩者區(qū)別
這里解釋如下:個人覺得很通俗易懂
錯誤是指在執(zhí)行代碼過程中發(fā)生的事件,它中斷或干擾代碼的正常流程并創(chuàng)建異常對象。當(dāng)錯誤中斷流程時,該程序?qū)L試尋找異常處理程序(一段告訴程序如何對錯誤做出響應(yīng)的代碼),以幫助程序恢復(fù)流程。換句話說,錯誤是一個事件,而異常是該事件創(chuàng)建的對象。
當(dāng)使用短語“產(chǎn)生異常”時,表示存在問題的方法發(fā)生錯誤,并創(chuàng)建異常對象(包含該錯誤的信息及發(fā)生的時間和位置)來響應(yīng)該錯誤。導(dǎo)致出現(xiàn)錯誤和隨后異常的因素包括用戶錯誤、資源失敗和編程邏輯失敗。這些錯誤與代碼實現(xiàn)特定任務(wù)的方法有關(guān),而與該任務(wù)的目的無關(guān)。
如果不進(jìn)行異常處理,即不對錯誤做出響應(yīng),程序的健壯性就會大打折扣,甚至無法保證正常運行,所以必須要進(jìn)行異常處理。
原文:http://blog.163.com/zhaojinyong2@126/blog/static/279729562008719384580/
Python的異常處理能力是很強大的,可向用戶準(zhǔn)確反饋出錯信息。在Python中,異常也是對象,可對它進(jìn)行操作。所有異常都是基類 Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模塊中定義。Python自動將所有異常名稱放在內(nèi)建 命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。一旦引發(fā)而且沒有捕捉SystemExit異常,程序執(zhí)行就會終止。如果交互式會話 遇到一個未被捕捉的SystemExit異常,會話就會終止。
Python采用的是”嘗試(try)塊“、和”捕獲(catch)塊“。
二、Python中的異常
1、NameError:嘗試訪問一個未聲明的變量
>>>foo Traceback (most recent call last):File "<pyshell#0>", line 1, in <module> foo NameError: name 'foo' is not defined如果請求的名字沒有在任何名稱空間里找到,則產(chǎn)生一個NameError異常。
2、ZeroDivisionError:除數(shù)為0
>>> 1/0Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>1/0 ZeroDivisionError: integer division or modulo by zero3、SyntaxError:Python解釋器語法錯誤
>>> for SyntaxError: invalid syntax >>>SyntaxError異常是唯一一個不是在程序執(zhí)行時發(fā)生的異常,代表一個不正常的結(jié)構(gòu),一般在編譯時發(fā)生。
注意:Python是解釋型非編譯型,這里說的編譯是字節(jié)編譯。
4、IndexError:超出索引(?out of range)
>>> lis = [] >>> lis[0]Traceback (most recent call last):File "<pyshell#5>", line 1, in <module> lis[0] IndexError: list index out of range5、KeyError:請求一個不存在的字典關(guān)鍵字
>>> dic = {'name':'BeginMan'} >>> dic['name'] 'BeginMan' >>> dic['age'] Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> dic['age'] KeyError: 'age' >>>6、IOError:輸入輸出錯誤
>>> f = open('s.txt','r') Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> f = open('s.txt','r') IOError: [Errno 2] No such file or directory: 's.txt'7、AttributeError:嘗試訪問未知的屬性
>>> class myClass(object):pass>>> myIn = myClass() >>> myIn.barTraceback (most recent call last):File "<pyshell#17>", line 1, in <module> myIn.bar AttributeError: 'myClass' object has no attribute 'bar' >>>?8、ValueError:傳給函數(shù)的參數(shù)類型不正確,比如給int()函數(shù)傳入字符串形
?三、異常處理
try-except/try-finally只選其一,可以一個try多個except;但只能一個try,一個finally
try-except-finally組合
斷言assert:
try:assert 1 == 2,'1 is not equal 2' except Exception,e: print '%s:%s' %(e.__class__.__name__,e) #輸出:AssertionError:1 is not equal 2?注意:
如果上面的with代碼塊沒有使用from __future__ import with_statement, 代碼將會報錯, 提示你這個功能在2.6中實現(xiàn).
Warning: 'with' will become a reserved keyword in Python 2.6
?
轉(zhuǎn)載于:https://www.cnblogs.com/nolonely/p/6641528.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的《转》Python学习(16)-python异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]Oracle 初始化参数之curs
- 下一篇: websocket python爬虫_p