成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python異常處理體系簡介

開發(fā) 后端
Python的異常處理能力是很強(qiáng)大的,可向用戶準(zhǔn)確反饋出錯信息。本文將對Python異常處理體系進(jìn)行簡單介紹。

Python內(nèi)建異常體系結(jié)構(gòu)

The class hierarchy for built-in exceptions is:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StandardError
      |    +-- BufferError
      |    +-- ArithmeticError
      |    |    +-- FloatingPointError
      |    |    +-- OverflowError
      |    |    +-- ZeroDivisionError
      |    +-- AssertionError
      |    +-- AttributeError
      |    +-- EnvironmentError
      |    |    +-- IOError
      |    |    +-- OSError
      |    |         +-- WindowsError (Windows)
      |    |         +-- VMSError (VMS)
      |    +-- EOFError
      |    +-- ImportError
      |    +-- LookupError
      |    |    +-- IndexError
      |    |    +-- KeyError
      |    +-- MemoryError
      |    +-- NameError
      |    |    +-- UnboundLocalError
      |    +-- ReferenceError
      |    +-- RuntimeError
      |    |    +-- NotImplementedError
      |    +-- SyntaxError
      |    |    +-- IndentationError
      |    |         +-- TabError
      |    +-- SystemError
      |    +-- TypeError
      |    +-- ValueError
      |         +-- UnicodeError
      |              +-- UnicodeDecodeError
      |              +-- UnicodeEncodeError
      |              +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
       +-- ImportWarning
       +-- UnicodeWarning
       +-- BytesWarning

捕獲異常的方式

方法一:捕獲所有的異常

  ''' 捕獲異常的***種方式,捕獲所有的異常 '''
    try:
        a = b
        b = c
    except Exception,data:
        print Exception,":",data
    '''輸出:<type 'exceptions.Exception'> : local variable 'b' 
referenced before assignment ''

方法二:采用traceback模塊查看異常,需要導(dǎo)入traceback模塊

   ''' 捕獲異常的第二種方式,使用traceback查看異常 '''
    try:
        a = b
        b = c
    except:
        print traceback.print_exc()
    '''輸出: Traceback (most recent call last):
          File "test.py", line 20, in main
                a = b
        UnboundLocalError: local variable 'b' referenced before assignmen

方法三:采用sys模塊回溯***的異常

''' 捕獲異常的第三種方式,使用sys模塊捕獲異常 '''
    try:
        a = b
        b = c
    except:
        info = sys.exc_info()
        print info
        print info[0]
        print info[1]
    '''輸出:
    (<type 'exceptions.UnboundLocalError'>, UnboundLocalError("local
variable 'b' referenced before assignment",),
    <traceback object at 0x00D243F0>)
    <type 'exceptions.UnboundLocalError'>
    local variable 'b' referenced before assignment
    '''

#p#

Python異常體系介紹

Python的異常處理可以向用戶準(zhǔn)確反饋出錯信息,所有異常都是基類Exception的子類。自定義異常都是從基類Exception中繼承。Python自動將所有內(nèi)建的異常放到內(nèi)建命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。

可以使用的語句結(jié)構(gòu)形式:

方式一:使用try,except語句來捕獲異常,可以有無數(shù)個except語句來處理異常,如果所有except語句都沒捕獲到,則拋出異常到調(diào)用此方法的函數(shù)內(nèi)處理,直到系統(tǒng)的主函數(shù)來處理。
使用except子句需要注意的事情,就是多個except子句截獲異常時,如果各個異常類之間具有繼承關(guān)系,則子類應(yīng)該寫在前面,否則父類將會直接截獲子類異常。放在后面的子類異常也就不會執(zhí)行到了。

try:
    block
except [excpetion,[data...]]:
    block
except [excpetion,[data...]]:
    block
except [excpetion,[data...]]:
    block

方式二:當(dāng)沒有異常發(fā)生的時候執(zhí)行else語句

try:
    block
except  [excpetion,[data...]]:
        block
else:
        block

方式三:finally 語句,不管有沒有發(fā)生異常都將執(zhí)行finally語句塊

例如我們在python中打開一個文件進(jìn)行讀寫操作,我在操作過程中不管是否出現(xiàn)異常,最終都是要把該文件關(guān)閉的。

try:
    block
finally:
        block

方式四:try,except,finally

try:
    block
except:
    block
finally:
    block

引發(fā)異常

raise [exception[,data]]

在Python中,要想引發(fā)異常,最簡單的形式就是輸入關(guān)鍵字raise,后跟要引發(fā)的異常的名稱。

異常名稱標(biāo)識出具體的類:Python異常是那些類的對象。執(zhí)行raise語句時,Python會創(chuàng)建指定的異常類的一個對象。

raise語句還可指定對異常對象進(jìn)行初始化的參數(shù)。為此,請?jiān)诋惓n惖拿Q后添加一個逗號以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個元組)。

例:

try:
    raise MyError #自己拋出一個異常
except MyError:
    print 'a error'
raise ValueError,’invalid argument’

捕捉到的內(nèi)容為:

type  = VauleError
message = invalid argument

#p#

異常處理的一些其它用途

除了處理實(shí)際的錯誤條件之外,對于異常還有許多其它的用處。在標(biāo)準(zhǔn) Python 庫中一個普通的用法就是試著導(dǎo)入一個模塊,然后檢查是否它能使用。

導(dǎo)入一個并不存在的模塊將引發(fā)一個 ImportError 異常。你可以使用這種方法來定義多級別的功能――依靠在運(yùn)行時哪個模塊是有效的,或支持多種平臺 (即平臺特定代碼被分離到不同的模塊中)。

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

下面的例子演示了如何使用異常支持特定平臺功能。代碼來自 getpass 模塊,一個從用戶獲得口令的封裝模塊。獲得口令在 UNIX、Windows 和 Mac OS 平臺上的實(shí)現(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 獨(dú)有的一個模塊,它提供了對于輸入終端的底層控制。

如果這個模塊無效 (因?yàn)樗辉谀愕南到y(tǒng)上,或你的系統(tǒng)不支持它),則導(dǎo)入失敗,Python 引發(fā)我們捕捉的 ImportError 異常。

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

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

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

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

自定義異常類,繼承Exception類及其子類

 class MyError( ArithmeticError ):
    pass
class MyError2 ( Exception ):
    pass

【編輯推薦】

  1. 對話Python之父:Python的成功之路
  2. NetBeans IDE新增Python支持
  3. 如何編寫Unix管道風(fēng)格的Python代碼
責(zé)任編輯:楊鵬飛 來源: javaeye
相關(guān)推薦

2021-04-13 12:55:06

SpringMVC解析器接口

2009-11-30 09:50:26

Linux內(nèi)核Linux內(nèi)核體系

2022-11-10 20:43:57

數(shù)據(jù)治理數(shù)據(jù)湖

2011-03-23 13:27:32

LAMP

2023-12-11 14:19:00

Java程序異常

2013-08-22 17:10:09

.Net異常處理

2012-12-21 10:48:20

Java異常

2010-02-23 17:23:26

Python異常處理

2010-06-18 15:22:14

Linux ACPI服

2023-07-04 15:00:47

微服務(wù)架構(gòu)開發(fā)

2010-06-18 14:58:42

Linux ACPI服

2012-11-12 10:32:48

IBMdw

2018-07-11 19:41:47

MySQL定義異常異常處理

2010-03-10 13:59:40

Python異常處理

2024-05-28 14:45:00

2023-10-31 08:15:51

2010-03-05 15:40:16

Python異常

2009-07-17 17:34:03

SwingWorker異常處理

2017-08-03 16:00:43

2022-12-28 08:17:19

異常處理code
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久热国产在线 | 九九热这里 | 在线免费观看黄色 | 日韩欧美视频在线 | av网站免费观看 | 久久伊人精品 | 成人av一区| 成人国产精品久久 | 国产在视频一区二区三区吞精 | 97久久精品 | 亚洲一区免费 | 韩国精品一区 | 欧美a√ | 夜夜爽99久久国产综合精品女不卡 | 色精品| 久久久久综合 | 国产一区二区三区亚洲 | 北条麻妃99精品青青久久主播 | 国产高清久久久 | 欧美日韩专区 | 国产91一区 | 视频1区2区 | 亚洲在线免费观看 | 久久成人午夜 | 成人在线播放网站 | 青青草在线播放 | 欧美亚洲国产日韩 | 波多野结衣先锋影音 | 51ⅴ精品国产91久久久久久 | 欧美一区在线视频 | 视频第一区 | 91在线色视频 | 亚洲精品成人网 | 欧美一区免费 | 日本激情视频中文字幕 | 亚洲欧洲小视频 | 午夜在线视频一区二区三区 | 九九亚洲 | 久久亚洲一区二区三区四区 | 亚洲精品www久久久 www.蜜桃av | 午夜精品一区二区三区在线播放 |