python 第十七周 異常處理與程式除錯

2021-07-03 11:29:39 字數 4278 閱讀 5259

異常(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及其繼承子類,和...