《转》Python学习(16)-python异常
轉(zhuǎn)自 http://www.cnblogs.com/BeginMan/p/3171445.html
一、什么是錯(cuò)誤,什么是異常,它們兩者區(qū)別
這里解釋如下:個(gè)人覺(jué)得很通俗易懂
錯(cuò)誤是指在執(zhí)行代碼過(guò)程中發(fā)生的事件,它中斷或干擾代碼的正常流程并創(chuàng)建異常對(duì)象。當(dāng)錯(cuò)誤中斷流程時(shí),該程序?qū)L試尋找異常處理程序(一段告訴程序如何對(duì)錯(cuò)誤做出響應(yīng)的代碼),以幫助程序恢復(fù)流程。換句話(huà)說(shuō),錯(cuò)誤是一個(gè)事件,而異常是該事件創(chuàng)建的對(duì)象。
當(dāng)使用短語(yǔ)“產(chǎn)生異常”時(shí),表示存在問(wèn)題的方法發(fā)生錯(cuò)誤,并創(chuàng)建異常對(duì)象(包含該錯(cuò)誤的信息及發(fā)生的時(shí)間和位置)來(lái)響應(yīng)該錯(cuò)誤。導(dǎo)致出現(xiàn)錯(cuò)誤和隨后異常的因素包括用戶(hù)錯(cuò)誤、資源失敗和編程邏輯失敗。這些錯(cuò)誤與代碼實(shí)現(xiàn)特定任務(wù)的方法有關(guān),而與該任務(wù)的目的無(wú)關(guān)。
如果不進(jìn)行異常處理,即不對(duì)錯(cuò)誤做出響應(yīng),程序的健壯性就會(huì)大打折扣,甚至無(wú)法保證正常運(yùn)行,所以必須要進(jìn)行異常處理。
原文:http://blog.163.com/zhaojinyong2@126/blog/static/279729562008719384580/
Python的異常處理能力是很強(qiáng)大的,可向用戶(hù)準(zhǔn)確反饋出錯(cuò)信息。在Python中,異常也是對(duì)象,可對(duì)它進(jìn)行操作。所有異常都是基類(lèi) Exception的成員。所有異常都從基類(lèi)Exception繼承,而且都在exceptions模塊中定義。Python自動(dòng)將所有異常名稱(chēng)放在內(nèi)建 命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。一旦引發(fā)而且沒(méi)有捕捉SystemExit異常,程序執(zhí)行就會(huì)終止。如果交互式會(huì)話(huà) 遇到一個(gè)未被捕捉的SystemExit異常,會(huì)話(huà)就會(huì)終止。
Python采用的是”嘗試(try)塊“、和”捕獲(catch)塊“。
二、Python中的異常
1、NameError:嘗試訪(fǎng)問(wèn)一個(gè)未聲明的變量
>>>foo Traceback (most recent call last):File "<pyshell#0>", line 1, in <module> foo NameError: name 'foo' is not defined如果請(qǐng)求的名字沒(méi)有在任何名稱(chēng)空間里找到,則產(chǎn)生一個(gè)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解釋器語(yǔ)法錯(cuò)誤
>>> for SyntaxError: invalid syntax >>>SyntaxError異常是唯一一個(gè)不是在程序執(zhí)行時(shí)發(fā)生的異常,代表一個(gè)不正常的結(jié)構(gòu),一般在編譯時(shí)發(fā)生。
注意:Python是解釋型非編譯型,這里說(shuō)的編譯是字節(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:請(qǐng)求一個(gè)不存在的字典關(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:輸入輸出錯(cuò)誤
>>> 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:嘗試訪(fǎng)問(wèn)未知的屬性
>>> 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ù)類(lèi)型不正確,比如給int()函數(shù)傳入字符串形
?三、異常處理
try-except/try-finally只選其一,可以一個(gè)try多個(gè)except;但只能一個(gè)try,一個(gè)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代碼塊沒(méi)有使用from __future__ import with_statement, 代碼將會(huì)報(bào)錯(cuò), 提示你這個(gè)功能在2.6中實(shí)現(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ù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的《转》Python学习(16)-python异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [转]Oracle 初始化参数之curs
- 下一篇: 如何用Python进行大数据挖掘和分析