日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

错误和异常

發(fā)布時間:2025/3/20 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 错误和异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是異常?

? ? ? ? 因為程序出現(xiàn)了錯誤而在正常流程控制以外采取的行動。這個行動分為兩個階段:首先是引起異常發(fā)生的錯誤;其次是檢測(和可能采取的措施)階段。

如:NameError

print ab

那對于異常如何檢測和處理呢?

異常可以用 try 語句來檢測。任何在 try 語句塊中的代碼都會被監(jiān)測,檢查有誤異常發(fā)生。

try 語句主要有兩種主要形式:try-except 和 try-finally ,這個兩個語句是互斥的,只能使用其中一個。一個 try 可以對應一個或者多個 except 子句,但是只能對應一個 finally 子句,或者是一個 try-except-finally符合語句

try:try_suite #監(jiān)控這里的異常 except Exception[,reason]:except_suite #異常處理代碼 try:f = open('absd','r') except IOError,e:print "could not open file:",e


當發(fā)生IOError異常時,這里打印出一條診斷消息,但程序仍然繼續(xù)執(zhí)行。當程序運行時,解釋器嘗試執(zhí)行 try 塊里面的代碼,如果代碼完成后,沒有異常發(fā)生,執(zhí)行流會忽略 except 語句繼續(xù)執(zhí)行,這里保存了異常的原因放置在e中。

也可以帶有多個except的try語句

try:try_suite #監(jiān)控這里的異常 except Exception1[,reason1]:except_suite1 #異常處理代碼 except Exception2[,reason2]:except_suite2 #異常處理代碼

這里頂一個以safe_float函數(shù),float內(nèi)建函數(shù)將把任意一個數(shù)值類型轉(zhuǎn)換成浮點型,同時也能把字符串表示的數(shù)值轉(zhuǎn)成浮點型,但對于其它類型就無能為力。

def safe_float(obj):try:retval = float(obj)except ValueError:retval = "could not convert non-number to float"except TypeError:retval = "object type can not be converted to float"return retvalprint safe_float('xyz') print safe_float(200L)

此外對于處理多個異常的except語句,也可以在一個except子句中處理多個異常。except語句在處理多個異常時要求被放置在一個元組里面。

try:try_suite #監(jiān)控這里的異常 except (Exception1[,Exception2[,...])[,reason1]:except_suite1 #異常處理代碼

? ? ?異常被引發(fā)后,異常參數(shù)reason是作為附加幫助信息傳遞給異常處理器,將會是一個包含來自導致異常的代碼的診斷信息的類實例。

def safe_float(obj):try:retval = float(obj)except (ValueError,TypeError):retval = "argument must be a number or numertic string"return retvalprint safe_float('xyz') print safe_float(200L)

由于多數(shù)內(nèi)見異常是從StanardError派生的,和這個元組只包含了一個只是錯誤原因的字符串,而調(diào)用str(reason)可以得到一個可讀性較好的字符串,因此做如下修改。

def safe_float(obj):try:retval = float(obj)except (ValueError,TypeError),args:retval = str(args)return retvalprint safe_float('xyz') print safe_float([])

這里給出一個讀取文件的針對異常處理的經(jīng)典方式

try:try:cfile = open("test,txt",'r')tx = cfile.readlines()except IOError:log.write("no tx this month\n") finally:cfile.close()代碼片會嘗試打開并且讀取數(shù)據(jù),如果在某一步發(fā)生了錯誤,會寫入到日志,隨后文件被正確關閉。

此外還有一個with語句,該語句的目的雜魚從流程圖中把try,except,finally關鍵字和資源分配釋放相關代碼統(tǒng)統(tǒng)去掉。

with context_expr [as var]:with_suite

注意with僅能鞏固支持上下文管理協(xié)議的對象,而file是可以,其他的這里先不介紹

with open("/etc/passwd",'r') as f:for eachline in f:pass如果一切正常,把文件對象賦值給f,然后是迭代器遍歷文件中的每一行,當完成時,關閉文件,無論在這一段代碼的開始,中間,還是結(jié)束時發(fā)生異常,會執(zhí)行清理的代碼,此外文件仍會被自動關閉。

總結(jié)

以上是生活随笔為你收集整理的错误和异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。