99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀python異常處理_python異常類型_python異常
python異常處理_python異常類型_python異常
2016-12-28
收藏

python異常處理_python異常類型_python異常

#!/usr/bin/python

import traceback
try:
1/0
#except Exception,e:
# print traceback.format_exc()

except Exception as e:
print e

#!/usr/bin/python
import traceback
try:
1/0
#except Exception,e:
# print traceback.format_exc()

except Exception , e:
print e

Python的異常處理能力是很強大的,可向用戶準確反饋出錯信息。在Python中,異常也是對象,可對它進行操作。所有異常都是基類Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模塊中定義。Python自動將所有異常名稱放在內(nèi)建命名空間中,所以程序不必導入exceptions模塊即可使用異常。一旦引發(fā)而且沒有捕捉SystemExit異常,程序執(zhí)行就會終止。如果交互式會話遇到一個未被捕捉的SystemExit異常,會話就會終止。

方式一:try語句:

1使用try和except語句來捕獲異常

try:
block
except [exception,[data…]]:
block

try:
block
except [exception,[data…]]:
block
else:
block

該種異常處理語法的規(guī)則是:

·   執(zhí)行try下的語句,如果引發(fā)異常,則執(zhí)行過程會跳到第一個except語句。

·   如果第一個except中定義的異常與引發(fā)的異常匹配,則執(zhí)行該except中的語句。

·   如果引發(fā)的異常不匹配第一個except,則會搜索第二個except,允許編寫的except數(shù)量沒有限制。

·   如果所有的except都不匹配,則異常會傳遞到下一個調(diào)用本代碼的最高層try代碼中。

·   如果沒有發(fā)生異常,則執(zhí)行else塊代碼。

例:

try:

f = open(“file.txt”,”r”)
except IOError, e:
print e

捕獲到的IOError錯誤的詳細原因會被放置在對象e中,然后運行該異常的except代碼塊

捕獲所有的異常

try:
a=b
b=c
except Exception,ex:
print Exception,”:”,ex

使用except子句需要注意的事情,就是多個except子句截獲異常時,如果各個異常類之間具有繼承關(guān)系,則子類應該寫在前面,否則父類將會直接截獲子類異常。放在后面的子類異常也就不會執(zhí)行到了。

2 使用try跟finally:

語法如下:

try:
block
finally:
block

該語句的執(zhí)行規(guī)則是:

·   執(zhí)行try下的代碼。

·   如果發(fā)生異常,在該異常傳遞到下一級try時,執(zhí)行finally中的代碼。

·   如果沒有發(fā)生異常,則執(zhí)行finally中的代碼。

第二種try語法在無論有沒有發(fā)生異常都要執(zhí)行代碼的情況下是很有用的。例如我們在python中打開一個文件進行讀寫操作,我在操作過程中不管是否出現(xiàn)異常,最終都是要把該文件關(guān)閉的。

這兩種形式相互沖突,使用了一種就不允許使用另一種,而功能又各異

2. 用raise語句手工引發(fā)一個異常:

raise [exception[,data]]

在Python中,要想引發(fā)異常,最簡單的形式就是輸入關(guān)鍵字raise,后跟要引發(fā)的異常的名稱。異常名稱標識出具體的類:Python異常是那些類的對象。執(zhí)行raise語句時,Python會創(chuàng)建指定的異常類的一個對象。raise語句還可指定對異常對象進行初始化的參數(shù)。為此,請在異常類的名稱后添加一個逗號以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個元組)。

例:

try:
raise MyError #自己拋出一個異常
except MyError:
print ‘a(chǎn) error’

raise ValueError,’invalid argument’
捕捉到的內(nèi)容為:

type = VauleError
message = invalid argument

3.   采用traceback(跟蹤)模塊查看異常

發(fā)生異常時,Python能“記住”引發(fā)的異常以及程序的當前狀態(tài)。Python還維護著traceback(跟蹤)對象,其中含有異常發(fā)生時與函數(shù)調(diào)用堆棧有關(guān)的信息。記住,異??赡茉谝幌盗星短纵^深的函數(shù)調(diào)用中引發(fā)。程序調(diào)用每個函數(shù)時,Python會在“函數(shù)調(diào)用堆?!钡钠鹗继幉迦牒瘮?shù)名。一旦異常被引發(fā),Python會搜索一個相應的異常處理程序。如果當前函數(shù)中沒有異常處理程序,當前函數(shù)會終止執(zhí)行,Python會搜索當前函數(shù)的調(diào)用函數(shù),并以此類推,直到發(fā)現(xiàn)匹配的異常處理程序,或者Python抵達主程序為止。這一查找合適的異常處理程序的過程就稱為“堆棧輾轉(zhuǎn)開解”(Stack Unwinding)。解釋器一方面維護著與放置堆棧中的函數(shù)有關(guān)的信息,另一方面也維護著與已從堆棧中“輾轉(zhuǎn)開解”的函數(shù)有關(guān)的信息。

格式:

try:
block
except:
traceback.print_exc()

示例:…excpetion/traceback.py

4. 采用sys模塊回溯最后的異常

import sys
try:
block
except:
info=sys.exc_info()
print info[0],”:”,info[1]

或者以如下的形式:

import sys
tp,val,td = sys.exc_info()

sys.exc_info()的返回值是一個tuple, (type, value/message, traceback)

這里的type —- 異常的類型

value/message —- 異常的信息或者參數(shù)

traceback —- 包含調(diào)用棧信息的對象。

從這點上可以看出此方法涵蓋了traceback.

5. 異常處理的一些其它用途

除了處理實際的錯誤條件之外,對于異常還有許多其它的用處。在標準 Python 庫中一個普通的用法就是試著導入一個模塊,然后檢查是否它能使用。導入一個并不存在的模塊將引發(fā)一個 ImportError 異常。你可以使用這種方法來定義多級別的功能――依靠在運行時哪個模塊是有效的,或支持多種平臺 (即平臺特定代碼被分離到不同的模塊中)。

你也能通過創(chuàng)建一個從內(nèi)置的 Exception 類繼承的類定義你自己的異常,然后使用 raise 命令引發(fā)你的異常。如果你對此感興趣,請看進一步閱讀的部分。

下面的例子演示了如何使用異常支持特定平臺功能。代碼來自 getpass 模塊,一個從用戶獲得口令的封裝模塊。獲得口令在 UNIX、Windows 和 Mac OS 平臺上的實現(xiàn)是不同的,但是這個代碼封裝了所有的不同之處。

例支持特定平臺功能

# Bind the name getpass to the appropriate function

try:
import termios, TERMIOS
except ImportError:
try:
import msvcrt
except ImportError:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
getpass = AskPassword
else:
getpass = win_getpass
else:
getpass = unix_getpass


termios 是 UNIX 獨有的一個模塊,它提供了對于輸入終端的底層控制。如果這個模塊無效 (因為它不在你的系統(tǒng)上,或你的系統(tǒng)不支持它),則導入失敗,Python 引發(fā)我們捕捉的 ImportError 異常。


OK,我們沒有 termios,所以讓我們試試 msvcrt,它是 Windows 獨有的一個模塊,可以提供在 Microsoft Visual C++ 運行服務中的許多有用的函數(shù)的一個API。如果導入失敗,Python 會引發(fā)我們捕捉的 ImportError 異常。


如果前兩個不能工作,我們試著從 EasyDialogs 導入一個函數(shù),它是 Mac OS 獨有的一個模塊,提供了各種各樣類型的彈出對話框。再一次,如果導入失敗,Python 會引發(fā)一個我們捕捉的 ImportError 異常。


這些平臺特定的模塊沒有一個有效 (有可能,因為 Python 已經(jīng)移植到了許多不同的平臺上了),所以我們需要回頭使用一個缺省口令輸入函數(shù) (這個函數(shù)定義在 getpass 模塊中的別的地方)。注意我們在這里所做的:我們將函數(shù) default_getpass 賦給變量 getpass。如果你讀了官方 getpass 文檔,它會告訴你 getpass 模塊定義了一個 getpass 函數(shù)。它是這樣做的:通過綁定 getpass 到正確的函數(shù)來適應你的平臺。然后當你調(diào)用 getpass 函數(shù)時,你實際上調(diào)用了平臺特定的函數(shù),是這段代碼已經(jīng)為你設(shè)置好的。你不需要知道或關(guān)心你的代碼正運行在何種平臺上;只要調(diào)用 getpass,則它總能正確處理。


一個 try…except 塊可以有一條 else 子句,就像 if 語句。如果在 try 塊中沒有異常引發(fā),然后 else 子句被執(zhí)行。在本例中,那就意味著如果 from EasyDialogs import AskPassword 導入可工作,所以我們應該綁定 getpass 到 AskPassword 函數(shù)。其它每個 try…except 塊有著相似的 else 子句,當我們發(fā)現(xiàn)一個 import 可用時,就綁定 getpass 到適合的函數(shù)。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }