最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python編程中的異常處理教程

 更新時(shí)間:2015年08月21日 10:18:49   作者:selFire  
這篇文章主要介紹了Python編程中的異常處理教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

1、異常簡(jiǎn)介
從軟件方面來(lái)說(shuō),錯(cuò)誤是語(yǔ)法或是邏輯上的,當(dāng)python檢測(cè)到一個(gè)錯(cuò)誤時(shí),解釋器就會(huì)指出當(dāng)前流已經(jīng)無(wú)法繼續(xù)執(zhí)行下去,這時(shí)候就出現(xiàn)了異常。異常分為兩個(gè)階段:首先是引起異常發(fā)生的錯(cuò)誤,然后是檢測(cè)和采取可能的措施。常見異常有
NameError、ZeroDivisionError、SyntaxError、IndexError、KeyError、IOError、AttributeError、ValueError、
TypeError等。所有的標(biāo)準(zhǔn)/內(nèi)建異常都是從根異常派生的,目前,有3個(gè)直接從BaseException派生的異常子類:SystemExit,KeyboardInterrupt和Exception。其它的所有的內(nèi)建異常都是Exception的子類。
2、異常檢測(cè)及處理
異??梢酝ㄟ^(guò)try語(yǔ)句來(lái)檢測(cè),有兩種主要形式:try-except和try-finally。前者可以添加一個(gè)可選的else子句來(lái)處理沒有檢測(cè)到異常的情況。一個(gè)try語(yǔ)句可以對(duì)應(yīng)一個(gè)或多個(gè)except語(yǔ)句,但只能對(duì)應(yīng)一個(gè)finally子句,except用來(lái)捕獲并處理異常,可以處理多個(gè)異常,也可以指定可選的異常參數(shù)(將會(huì)是一個(gè)包含來(lái)自異常的代碼的診斷信息的類實(shí)例,異常參數(shù)自身會(huì)組成一個(gè)元組,并存儲(chǔ)為類實(shí)例的屬性),要避免裸except(會(huì)捕獲所有異常,沒有機(jī)會(huì)保存異常發(fā)生的原因,雖然可以通過(guò)sys.exc_info()獲得,但不推薦,如果想捕獲所有異常,可以在except中使用BaseException類,而Exception類不包括KeyboardInterrupt和SystemExit),finally無(wú)論發(fā)生錯(cuò)誤與否都會(huì)執(zhí)行。try-except-finally是個(gè)復(fù)合語(yǔ)句。try檢測(cè)到異常時(shí),try語(yǔ)句塊中的剩余代碼是不會(huì)執(zhí)行的,異常會(huì)延著堆棧向上提交,直到找到合適的異常處理器,如果到達(dá)最頂層仍然沒有找到對(duì)應(yīng)的處理器,python解釋器會(huì)顯示出跟蹤返回消息,然后退出。
try-except語(yǔ)法如下:

try: 
  try_suite 
except Exception1[, reason1]: 
  suite_for_exception_ Exception1 
except Exception2[, reason2]: 
  suite_for_exception_ Exception2 
except (Exception3, Exception4)[, reason3_4]: 
  suite_for_exceptions_ Exception3_and_Exception4 
except (Exc5[, Exc6[, ... ExcN]])[, reason]: 
  suite_for_exceptions_ Exc5_to_ExcN 
else: 
  suite_for_no_exception 
finally: 
  suite_always_run 

可同時(shí)捕捉多個(gè)異常,可捕捉異常對(duì)象,可忽略異常類型以捕捉所有異常

>>> try: 
  x = int(input('input x:')) 
  y = int(input('input y:')) 
  print('x/y = ',x/y) 
except ZeroDivisionError: #捕捉除0異常 
  print("ZeroDivision") 
except (TypeError,ValueError) as e: #捕捉多個(gè)異常,并將異常對(duì)象輸出 
  print(e) 
except: #捕捉其余類型異常 
  print("it's still wrong") 
 
   
input x:12 
input y:0 
ZeroDivision 
>>> try: 
  x = int(input('input x:')) 
  y = int(input('input y:')) 
  print('x/y = ',x/y) 
except ZeroDivisionError: #捕捉除0異常 
  print("ZeroDivision") 
except (TypeError,ValueError) as e: #捕捉多個(gè)異常,并將異常對(duì)象輸出 
  print(e) 
except: #捕捉其余類型異常 
  print("it's still wrong") 
 
   
input x:12 
input y:y 
invalid literal for int() with base 10: 'y' 

try/except 可以加上 else 語(yǔ)句,實(shí)現(xiàn)在沒有異常時(shí)執(zhí)行什么

>>> try: 
  x = int(input('input x:')) 
  y = int(input('input y:')) 
  print('x/y = ',x/y) 
except ZeroDivisionError: #捕捉除0異常 
  print("ZeroDivision") 
except (TypeError,ValueError) as e: #捕捉多個(gè)異常 
  print(e) 
except: #捕捉其余類型異常 
  print("it's still wrong") 
else: #沒有異常時(shí)執(zhí)行 
  print('it work well') 
 
   
input x:12 
input y:3 
x/y = 4.0 
it work well 

3、上下文管理中的with語(yǔ)句
如上提到的try-except和try-finally,python對(duì)隱藏細(xì)節(jié)做了大量的工作,因此需要你操心的僅是如何解決你所遇到的問(wèn)題。另一個(gè)隱藏低層次的抽象的例子是with語(yǔ)句,它在python2.6中正式啟用。python2.5嘗試性的引入了with,并對(duì)使用with作為標(biāo)識(shí)符的應(yīng)用程序發(fā)出這樣的警告——在python2.6中,with將會(huì)成為關(guān)鍵字。如果你想在python2.5使用wiht語(yǔ)句,你必須用from __fututure__ import with_statement來(lái)導(dǎo)入它。
類似try-except-finally,with語(yǔ)句也是用來(lái)簡(jiǎn)化代碼的,這與用try-except和try-finally所想達(dá)到的目的千呼后應(yīng)。try-except和try-finally的一種特定的配合用法是保證共享的資源的唯一分配,并在任務(wù)結(jié)束的時(shí)候釋放它。比如文件(數(shù)據(jù)、日志、數(shù)據(jù)庫(kù)等等),線程資源,簡(jiǎn)單同步,數(shù)據(jù)庫(kù)連接等等,with語(yǔ)句的目的就是應(yīng)用在這種場(chǎng)景。然而,with語(yǔ)句的目的在于從流程圖中把try,except和finally關(guān)鍵字和資源分配釋放相關(guān)代碼統(tǒng)統(tǒng)去掉,而不是像try-except-finally那樣僅僅簡(jiǎn)化代碼使之易用。with語(yǔ)法的基本用法如下:

with context_expr [as var]: 
  with_suite 

看起來(lái)如此簡(jiǎn)單,但with僅能工作于支持上下文管理協(xié)議的對(duì)象。當(dāng)with語(yǔ)句執(zhí)行時(shí),便執(zhí)行context_expr來(lái)獲得一個(gè)上下文管理器,其職責(zé)是提供一個(gè)上下文對(duì)象,這是通過(guò)調(diào)用__context__()方法來(lái)實(shí)現(xiàn)的。一旦我們獲得了上下文對(duì)象,就會(huì)調(diào)用它的__enter__()方法。當(dāng)with語(yǔ)句塊執(zhí)行結(jié)束,會(huì)調(diào)用上下文對(duì)象的__exit__()方法,有三個(gè)參數(shù),如果with語(yǔ)句塊正常結(jié)束,三個(gè)參數(shù)都是None,如果發(fā)生異常,三個(gè)參數(shù)的值分別等于調(diào)用sys.exc_info()函數(shù)返回的三個(gè)值:類型(異常類),值(異常實(shí)例)和回溯(traceback)相應(yīng)的回溯對(duì)象。contextlib模塊可以幫助編寫對(duì)象的上下文管理器。

常見異常:
Exception                        所有異常的基類
AttributeError                 特性應(yīng)用或賦值失敗時(shí)引發(fā)
IOError                             試圖打開不存在的文件時(shí)引發(fā)
IndexError                       在使用序列中不存在的索引時(shí)引發(fā)
KeyError                          在使用映射不存在的鍵時(shí)引發(fā)
NameError                       在找不到名字(變量)時(shí)引發(fā)
SyntaxError                     在代碼為錯(cuò)誤形式時(shí)引發(fā)
TypeError                         在內(nèi)建操作或者函數(shù)應(yīng)用于錯(cuò)誤類型的對(duì)象是引發(fā)
ValueError                       在內(nèi)建操作或者函數(shù)應(yīng)用于正確類型的對(duì)象,但是該對(duì)象使用不合適的值時(shí)引發(fā)
ZeroDivisionError          在除法或者摸除操作的第二個(gè)參數(shù)為0時(shí)引發(fā)

4.自定義異常:
繼承于 Exception 的類

class myException(Exception):pass 

5.拋出異常:
raise 語(yǔ)句
>>> def division(x,y): 
  if y == 0 : 
    raise ZeroDivisionError('The zero is not allow') 
  return x/y 
 
>>> try: 
  division(1,0) 
except ZeroDivisionError as e: 
  print(e) 
 
   
The zero is not allow 

6.finally 語(yǔ)句
不管是否出現(xiàn)異常,最后都會(huì)執(zhí)行finally的語(yǔ)句塊內(nèi)容,用于清理工作
所以,你可以在 finally 語(yǔ)句中關(guān)閉文件,這樣就確保了文件能正常關(guān)閉
>>> try: 
  x = int(input('input x:')) 
  y = int(input('input y:')) 
  print('x/y = ',x/y) 
except ZeroDivisionError: #捕捉除0異常 
  print("ZeroDivision") 
except (TypeError,ValueError) as e: #捕捉多個(gè)異常 
  print(e) 
except: #捕捉其余類型異常 
  print("it's still wrong") 
else: #沒有異常時(shí)執(zhí)行 
  print('it work well') 
finally: #不管是否有異常都會(huì)執(zhí)行 
  print("Cleaning up") 
 
   
input x:12 
input y:3 
x/y = 4.0 
it work well 
Cleaning up 

異常拋出之后,如果沒有被接收,那么程序會(huì)拋給它的上一層,比如函數(shù)調(diào)用的地方,要是還是沒有接收,那繼續(xù)拋出,如果程序最后都沒有處理這個(gè)異常,那它就丟給操作系統(tǒng)了 -- 你的程序崩潰了,這點(diǎn)和C++一樣的。

 

相關(guān)文章

  • 一文詳解凱撒密碼的原理及Python實(shí)現(xiàn)

    一文詳解凱撒密碼的原理及Python實(shí)現(xiàn)

    凱撒密碼是古羅馬愷撒大帝用來(lái)對(duì)軍事情報(bào)進(jìn)行加密的算法,它采用了替換方法對(duì)信息中的每一個(gè)英文字符循環(huán)替換為字母表序列該字符后面第三個(gè)字符。本文主要為大家講解了凱撒密碼的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法

    Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法

    今天小編就為大家分享一篇Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • django框架中ajax的使用及避開CSRF 驗(yàn)證的方式詳解

    django框架中ajax的使用及避開CSRF 驗(yàn)證的方式詳解

    這篇文章主要介紹了django框架中ajax的使用及避開CSRF 驗(yàn)證的方式,結(jié)合實(shí)例形式分析了Django框架ajax后臺(tái)交互與排除驗(yàn)證csrf相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法

    Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法,涉及Python文件讀取、分割及多線程相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Python 調(diào)用DLL操作抄表機(jī)

    Python 調(diào)用DLL操作抄表機(jī)

    Python 調(diào)用DLL的實(shí)用代碼。
    2009-01-01
  • Appium+Python+pytest自動(dòng)化測(cè)試框架的實(shí)戰(zhàn)

    Appium+Python+pytest自動(dòng)化測(cè)試框架的實(shí)戰(zhàn)

    本文主要介紹了Appium+Python+pytest自動(dòng)化測(cè)試框架的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • pygame播放音樂的方法

    pygame播放音樂的方法

    這篇文章主要介紹了pygame播放音樂的方法,以兩個(gè)簡(jiǎn)單實(shí)例形式分析了pygame播放MP3音樂的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-05-05
  • Python中操作MySQL入門實(shí)例

    Python中操作MySQL入門實(shí)例

    這篇文章主要介紹了Python中操作MySQL入門實(shí)例,本文講解了安裝、打開數(shù)據(jù)庫(kù)連接、插入數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)等操作,需要的朋友可以參考下
    2015-02-02
  • python讀取幾個(gè)G的csv文件方法

    python讀取幾個(gè)G的csv文件方法

    今天小編就為大家分享一篇python讀取幾個(gè)G的csv文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python二叉樹的鏡像轉(zhuǎn)換實(shí)現(xiàn)方法示例

    Python二叉樹的鏡像轉(zhuǎn)換實(shí)現(xiàn)方法示例

    這篇文章主要介紹了Python二叉樹的鏡像轉(zhuǎn)換實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了二叉樹鏡像轉(zhuǎn)換的原理及Python相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03

最新評(píng)論

扎赉特旗| 盐源县| 南岸区| 盐边县| 凤山县| 东乡族自治县| 大竹县| 恩施市| 申扎县| 盖州市| 海兴县| 平泉县| 芒康县| 郴州市| 龙岩市| 夏邑县| 鹤山市| 海伦市| 和政县| 桑植县| 寿宁县| 青河县| 东至县| 苗栗市| 大邑县| 卓资县| 齐河县| 舒兰市| 日照市| 遂昌县| 随州市| 东莞市| 海林市| 邵武市| 尼勒克县| 星座| 宜昌市| 犍为县| 岳普湖县| 右玉县| 寿阳县|