完整形式:try-except-else-finally
try:
"框住了你感覺會丟擲異常的**"
except:
"try**塊裡的**如果丟擲異常了,該執行什麼內容"
else:
"try**塊裡的**如果沒有跑出異常,就執行這裡"
finally:
"不管如何,finally裡的**,是總會執行的"
以下是一套完整的例項:
import urllib
sth_url = ""
try:
d = urllib.urlopen(sth_url)
except ioerror:
print
"哈哈哈出錯了"
else:
content = d.read()
finally:
d.close()
找到python的內建異常;
理解python的內建異常分別對應什麼情況;
閱讀你的**,找到你的**裡可能會丟擲內建異常的地方;
僅對這幾行**做異常處理。
總結:假設你無法知道你的**會丟擲什麼異常,那麼,你的異常處理便是無效的。即準確了解你的**情況,在必要時才使用異常。
import sys
try:
a = 3
assert a > 4
except:
exc = sys.exc_info() #sys.exc_info() 提供乙個三元組資訊:異常類;異常類例項;跟蹤記錄物件
logging.debug(exc[1])
print exc
import logging
logger = logging.getlogger()
hdlr = logging.filehandler('/tmp/sendlog.txt')
formatter = logging.formatter('%(asctime)s %(levelname)s %(message)s') #定義儲存格式
hdlr.setformatter(formatter)
logger.addhandler(hdlr)
logger.setlevel(logging.notset)
logger.debug('this is a debug message')
logger.error('this is an error message')
格式:*assert 表示式 , '出錯以後丟擲的message'*
一種開發期時檢定**的方式,斷言失敗只會丟擲assertionerror。
何時使用斷言?先斷言絕對不能發生的錯誤,然後再去處理異常。
下面是乙個最簡單的自定義異常:
class
myexception
(exception):
def__init__
(self,error,message):
self.args = (error,message)
self.error = error
self.message = message
try:
raise myexception(1,'my exception') #raise 語句觸發異常
except exception as e:
print str(e)
用with語句開啟檔案,不需要關閉檔案操作。
with open('filename','r') as a:
e = a.read()
class
sth(object):
def__init__
(self,xixi):
self.a = xixi
def__enter__
(self):
print
"enter"
return self.a
def__exit__
(self,type,value,traceback)
print "exit"
with
sth('xixi_name')
asf:
# f是enter方法返回的物件
print f
乙個非常不好的異常處理方式 偷換Exception
有時根據現場發回出錯日誌,根本不能找到對應的原因。比如當前日誌,乙個功能點失效,日誌裡只有記錄 建立目錄失效 的異常。以此為出發點,檢視許可權和磁碟問題,沒有發現任何問題。後來除錯環境用vs跟蹤,然後發現這樣的奇葩 try catch 這個 居然沒有截獲真正的異常,記錄下來好便於跟蹤,反倒自己丟擲乙...
python中異常語句 python 異常
導航 python的異常分為兩種,1 語法錯誤,在python直譯器的語法檢測中不通過不能執行 2 異常,python程式執行期檢測到的錯誤被稱為異常。在沒有做異常處理時,將終止程式並提示異常資訊,如 字串轉換為數字時的型別轉換異常,檔案讀取時的檔案不存在異常,網路鏈結時主機不可達異常 等。當pyt...
python中的異常
exception類是最常用的異常類,該類包括standarderror,stopiteration,generatorexit,warning等異常類.standarderror類是python的錯誤異常,如果程式中出現邏輯上的錯誤,將引發該異常.例如除數為0的異常。standarderror類是...