日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python異常處理總結(jié)

系統(tǒng) 1762 0

本文較為詳細(xì)的羅列了Python常見的異常處理,供大家參考,具體如下:

1. 拋出異常和自定義異常

Python用異常對(duì)象(exception object)表示異常情況,遇到錯(cuò)誤后,會(huì)引發(fā)異常。如果異常對(duì)象并未被處理或捕捉,程序就會(huì)用所謂的回溯(Traceback,一種錯(cuò)誤信息)終止執(zhí)行。

①.raise 語句

Python中的raise 關(guān)鍵字用于引發(fā)一個(gè)異常,基本上和C#和Java中的throw關(guān)鍵字相同,如下所示:

            
# -- coding: utf-8 --

def ThorwErr():
  raise Exception("拋出一個(gè)異常")

# Exception: 拋出一個(gè)異常
ThorwErr()


          

raise關(guān)鍵字后面是拋出是一個(gè)通用的異常類型(Exception),一般來說拋出的異常越詳細(xì)越好,Python在exceptions模塊內(nèi)建了很多的異常類型,通過使用dir函數(shù)來查看exceptions中的異常類型,如下:

            
import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)


          

傳遞異常

捕捉到了異常,但是又想重新引發(fā)它(傳遞異常),可以使用不帶參數(shù)的raise語句即可:

            
# -- coding: utf-8 --
class MuffledCalculator:
  muffled = False
  def calc(self,expr):
    try:
      return eval(expr)
    except ZeroDivisionError:
      if self.muffled:
        print 'Division by zero is illegal'
      else:
        raise

          

②.自定義異常類型

Python中也可以自定義自己的特殊類型的異常,只需要要從Exception類繼承(直接或間接)即可:

            
class SomeCustomException(Exception):
  pass

          

2. 捕捉異常

和C#中的try/catch類似,Python中使用try/except關(guān)鍵字來捕捉異常,如下:

            
# -- coding: utf-8 --

try:
  print 2/0
except ZeroDivisionError:
  print '除數(shù)不能為0'


          

①.捕捉多個(gè)異常

在一個(gè)except語句只捕捉其后聲明的異常類型,如果可能會(huì)拋出的是其他類型的異常就需要再增加一個(gè)except語句了,或者也可以指定一個(gè)更通用的異常類型比如:Exception,如下:

            
# -- coding: utf-8 --
try:
  print 2/'0'
except ZeroDivisionError:
  print '除數(shù)不能為0'
except Exception:
  print '其他類型異常'

          

為了捕獲多個(gè)異常,除了聲明多個(gè)except語句之外,還可以在一個(gè)except語句之后將多個(gè)異常作為元組列出來即可:

            
# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '發(fā)生了一個(gè)異常'

          

②.獲取異常信息

每個(gè)異常都會(huì)有一些異常信息,一般情況下我們應(yīng)該把這些異常信息記錄下來:

            
# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception) as e:
  # unsupported operand type(s) for /: 'int' and 'str'
  print e

          

3. finally子句

finally子句和try子句聯(lián)合使用但是和except語句不同,finally不管try子句內(nèi)部是否有異常發(fā)生,都會(huì)執(zhí)行finally子句內(nèi)的代碼。所有一般情況下,finally自己常常用于關(guān)閉文件或者在Socket中。

            
# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '發(fā)生了一個(gè)異常'
finally:
  print '不管是否發(fā)生異常都執(zhí)行'
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 通渭县| 隆尧县| 陵水| 东平县| 平江县| 禹城市| 新化县| 吉隆县| 青海省| 嵊泗县| 芜湖县| 庐江县| 绍兴县| 台北市| SHOW| 望城县| 丰县| 芷江| 高要市| 洱源县| 台州市| 云和县| 邵东县| 临城县| 淮安市| 卓资县| 博爱县| 延安市| 寿宁县| 九江县| 定州市| 长宁区| 大连市| 大安市| 宿迁市| 阳曲县| 海城市| 德阳市| 兴安县| 寿阳县| 夏河县|