異常(exception)是指程式中的例外、違例情況。
python2.5中的異常定義在exception模組中,並繼承自基類baseexception。
exception類是常用的異常類,包括:standarderror, stopiteration , generatorexit , warning.等類
1、standarderror 是python的錯誤異常,如果程式中出現邏輯錯誤,將引發該異常,它包括如下圖的常見異常,使用時,不需要匯入exceptions模組。
2、stopiteration類判斷迴圈是否執行到尾部,如果到尾部則丟擲該異常。
3、generatorexit 類由generator函式引發的異常,當呼叫close()時引發該異常。
4、warning 類表示程式中的**引起的警告。
try 子句放置可能出現的異常語句,except子句處理異常。
# try...except
try:
file("hello.txt", "r")
print "讀檔案"
except ioerror: # 捕獲ioerror異常
print "檔案不存在"
except: # 其他異常情況
print "程式異常"
# try...except...else #try子句發生異常,程式直接跳轉except子句,反之,程式將執行else子句。
try:
result = 10/0
except zerodivisionerror:
print "0不能被整除"
else:
print result
# try...except的巢狀
try:
s = "hello"
try:
print s[0] + s[1]
print s[0] - s[1]
except typeerror:
print "字串不支援減法運算"
except:
print "異常"
#typeerror: 'str' object does not support item assignment
如果外層try子句中的**塊引發異常,程式將直接跳轉到外層except子句,內部try子句不會被執行。在try...except語句後還可以新增1個finally 子句,無論異常是否發生,finally子句都會被執行。所有的finally子句通常用於關閉因異常而不能釋放的資源。
# try...except...finally
try:
f = open("hello.txt", "r")
try:
print fsock.read(5)
except:
print "讀取檔案錯誤"
finally: # finally子句一般用於釋放資源
print "釋放資源"
f.close() #變數f的全域性性
except ioerror:
print "檔案不存在"
注意:由於python動態語言的特殊性,要在某個**塊中使用同一級其他**塊中定義的變數,可以考慮以巢狀的方式或全域性變數來實現。raise語句直接顯式引發異常。一旦執行了raise語句,raise後面的語句**將不能被執行。
import exceptions
try:
s = none
if s is none:
print "s是空物件"
raise nameerror
print len(s)
except:
print "空物件沒有長度"
print help(exceptions)
自定義異常必須繼承exception類。按照命名規範以「error"結尾。
from __future__ import division
class divisionexception(exception): # 自定義異常
def __init__(self, x, y):
exception.__init__(self, x, y)
self.x = x
self.y = y
if __name__ == "__main__":
try:
x = 3
y = 2
if x % y > 0:
print x / y
raise divisionexception(x, y) # 丟擲異常
except divisionexception, div:
print "divisionexception: x / y = %.2f" % (div.x / div.y)
assert語句用於檢測某個條件表示式是否為真。該語句又稱斷言語句,即assert認為檢測的表示式永遠為真。如果斷言失敗,會引發assertionerror異常
# assert判斷邏輯表示式
t = ("hello",)
assert len(t) >= 1
#t = ("hello")
#assert len(t) == 1
# 帶message的assert語句
month = 13
assert 1 <= month <= 12, "month errors"
#assert month >= 1 and month <= 12, "month errors"
python支援形如:m <= x <= n 的表示式。
def fun(): # 除法運算g
a = 10
b = 0
return a / b
def format(): # 格式化輸出
print "a / b = " + str(fun())
if __name__ == "__main__":
format()
traceback (most recent call last):
file "f:/python語言學習/開發詳解光碟/自寫程式/3.py", line 13, in format()
file "f:/python語言學習/開發詳解光碟/自寫程式/3.py", line 10, in format
print "a / b = " + str(fun())
file "f:/python語言學習/開發詳解光碟/自寫程式/3.py", line 7, in fun
return a / b
zerodivisionerror: integer division or modulo by zero
程式執行時,python將產生traceback物件,用於記錄異常資訊和當前程式狀態 。上面**,traceback物件先記錄主程式的狀態,然後記錄format()中的狀態,最後記錄fun()中的狀態。當fun()出現異常時,traceback物件將輸出記錄的資訊。因此,異常資訊應從下往上閱讀,最後1次出現的行號通常就是錯誤的發生處。9.2 使用pythonwin 除錯程式9.3 使用eclipse for python 除錯程式 第十七周總結
周工作總結及計畫表 部 門 理工大學 姓 名 冉濤 入 職 時 間 2015.7.5 本週已完成工作內容及總結 1 基本完成課程設計要求的三道題目,但還有一些小地方沒有做好,主要是在一些異常處理方面,主要是從控制台輸入時的型別轉換異常,以及gui介面的輸入為空的異常和型別轉換異常。2 課程設計的第四...
第十七周總結
本週主要學習了spring框架和mybatis框架,接觸到框架後最大的感觸就是原來 編寫可以變得如此簡便,之前複雜的編寫過程被簡化了許多,專案的開發效率自然也得到極大提公升。感覺在spring的學習中最大的困難是對這種框架模式的理解,學了一天到最後也不知道spring到底是什麼,可以用來幹什麼,怎麼...
C 銳利體驗 第十七講 異常處理
c 銳利體驗 南京郵電學院李建忠 lijianzhong 263.第十七講異常處理 異常處理 結構化異常處理是現代分布式環境下元件設計的乙個必要的環節,通用語言執行時從底層構造給予異常處理以堅實的支援。在c 中,異常物件被設計為封裝了各種異常資訊的類 system.exception及其繼承子類,和...