Python入门笔记(17):错误、异常
一、什么是錯誤,什么是異常,它們兩者區別
這里解釋如下:個人覺得很通俗易懂
錯誤是指在執行代碼過程中發生的事件,它中斷或干擾代碼的正常流程并創建異常對象。當錯誤中斷流程時,該程序將嘗試尋找異常處理程序(一段告訴程序如何對錯誤做出響應的代碼),以幫助程序恢復流程。換句話說,錯誤是一個事件,而異常是該事件創建的對象。
當使用短語“產生異常”時,表示存在問題的方法發生錯誤,并創建異常對象(包含該錯誤的信息及發生的時間和位置)來響應該錯誤。導致出現錯誤和隨后異常的因素包括用戶錯誤、資源失敗和編程邏輯失敗。這些錯誤與代碼實現特定任務的方法有關,而與該任務的目的無關。
如果不進行異常處理,即不對錯誤做出響應,程序的健壯性就會大打折扣,甚至無法保證正常運行,所以必須要進行異常處理。
原文:http://blog.163.com/zhaojinyong2@126/blog/static/279729562008719384580/
Python的異常處理能力是很強大的,可向用戶準確反饋出錯信息。在Python中,異常也是對象,可對它進行操作。所有異常都是基類 Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模塊中定義。Python自動將所有異常名稱放在內建 命名空間中,所以程序不必導入exceptions模塊即可使用異常。一旦引發而且沒有捕捉SystemExit異常,程序執行就會終止。如果交互式會話 遇到一個未被捕捉的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如果請求的名字沒有在任何名稱空間里找到,則產生一個NameError異常。
2、ZeroDivisionError:除數為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異常是唯一一個不是在程序執行時發生的異常,代表一個不正常的結構,一般在編譯時發生。
注意:Python是解釋型非編譯型,這里說的編譯是字節編譯。
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:請求一個不存在的字典關鍵字
>>> 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:傳給函數的參數類型不正確,比如給int()函數傳入字符串形
?三、異常處理
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中實現.
Warning: 'with' will become a reserved keyword in Python 2.6
?
強烈推薦:http://blog.csdn.net/sinchb/article/details/8392827#t1
from: http://www.cnblogs.com/BeginMan/p/3171445.html
總結
以上是生活随笔為你收集整理的Python入门笔记(17):错误、异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python numpy函数hstack
- 下一篇: 用Python和OpenCV提取颜色直方