python Exception(异常处理)
生活随笔
收集整理的這篇文章主要介紹了
python Exception(异常处理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python異常:
? ?python在運行時錯誤稱為異常
? ? ? ?語法錯誤:軟件的結構上有錯誤而導致不能被解釋器解釋或不能被編譯器編譯。
? ? ? ?邏輯錯誤:由于不完整或不合法的輸入所致,也可能是邏輯無法生成、計算或者出結果需要的過程無法執行等。
? ?默認情況下:python腳本執行過程中出現異常后,腳本執行將被終止。
? ?
? ?python 異常是一個對象,表示錯誤或意外的情況
? ?在python檢測到一個錯誤時,將觸發一個異常:
? ? ? ?python可以通過異常傳導機制傳遞一個異常對象,發出一個異常情況出現的信號。
? ? ? ?程序員也可以在代碼中托運觸發異常
? ?python異常也可以理解為:程序出現了錯誤,而在正??刂屏饕酝獠扇〉男袨?/span>
? ? ? ?第一階段:解釋器觸發異常,此時當前程序流將被打斷。
? ? ? ?第二階段:異常處理,如忽略非致命錯誤、減輕錯誤帶來的影響等。
異常的功用
? ?錯誤處理:
? ? ? ?python的默認處理:停止程序,打印錯誤消息
? ? ? ?使用try語句處理異常,并從異常中恢復
? ?事件通知:
? ? ? ?用于發出有效狀態信號
? ?特殊情況處理:
? ? ? ?無法調整代碼去處理的場景
? ?終止行為:
? ? ? ?try/finally語句可確保執行必需的結束處理機制
? ?非常規控制流程:
? ? ? ?異常是一種高級跳轉(goto)機制
異常對象
? ?python異常是內置的經典類exception的子類的實例
? ? ? ?為了向后兼容,python還允許使用字符串或任何經典類實例
? ? ? ?python2.5之后,exception是從BaseException繼承的新式類(即exception的父類是BaseException類)
? ?python自身引發的所有異常都是Exception的子類的實例
? ?大多的標準異常都是由StandardError派生的,其有3個抽象的子類
? ? ? ?ArithmeticError:由于算術錯誤而引發的異常基類;包括:OverflowError、ZeroDivisionError、FloatingPorintError
? ? ? ?LookupError:容器在接收到一個無效的鍵或索引時引發的異常的基類;包括:IndexError、KeyError
? ? ? ?EnvironmentError:由于外部原因而導致的異常的基類;包括:IOError、OSError、WindowsError
? ? ? ? ? ?
標準異常類
? ?AssertionError:斷言語句失敗
? ?AttributeError:屬性引用或賦值失敗
? ?FloatingPointError:浮點型運算失敗
? ?IOError:I/O操作失敗
? ?ImportError:import語句不能找到要導入的模塊,或者不能找到該模塊特別請求的名稱。
? ?IndentationError:解析器遇到了一個由于錯誤的縮進而引發的語法錯誤
? ?IndexError:用來索引序列的整數超出了范圍。
? ?KeyError:用來索引映射的鍵不在映射中
? ?KeyboardInterrupt:用戶按了中斷鍵(ctrl+c、ctrl+break、delete鍵)
? ?MemoryError:運算耗盡內存
? ?NameError:引用了一個不存在的變量名
? ?NotImplementedError:由抽象基類引發的異常,用于指示一個具體的子類必須覆蓋一個方法
? ?OSError:由模塊os中的函數引發的異常,用來指示平臺相關的錯誤
? ?OverflowError:整數運算的結果太大導致溢出
? ?SyntaxError:語法錯誤
? ?SystemError:python解釋器本身或某些擴展模塊中的內部錯誤
? ?TypeError:對某對象執行了不支持的操作
? ?UnboundLocalError:引用未綁定值的本地變量
? ?UnicodeError:在Unicode的字符串之間進行轉換時發生的錯誤
? ?ValueError:應用于某個對象的操作或函數,這個對象具有正確的類型,但確有不適當的值
? ?WindowsError:模塊OS中的函數引發的異常,用于指示與windowsSHUDR QAYK
? ?ZeroDivisionError:除數為0引發的異常 ?
檢測和處理異常:
? ?異常通過try語句來檢測:任何在try語句塊中的代碼都會被監測,以檢查有無異常發生。
? ?tr語句主要有兩種形式:
? ? ? ?try-except:檢測和處理異常
? ? ? ? ? ?可以有多個except;支持使用else子句處理沒有探測異常的執行的代碼
? ? ? ?try-finally:僅檢查異常并做一些必要的清理工作
? ? ? ? ? ?僅能有一個finally
? ?try語句的復合形式: try-except-finally ? ?
? ?注意:try語句中的任何語句出現異常后,就會跳至定義的相關except中,而try結構中發生異常之后的其它語句就不會再執行。
? ?
? ?try - except語句:定義了進程異常監控的一段代碼,并且提供了處理異常的機制
? ?語法:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except Exception[, reason]:
? ? ? ? ? ?except_suite
? ? ? ?或
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except (Exception1,Exception2[,...])[, reason]:
? ? ? ? ? ?except_suite
? ? ? ? ? ?
? ?例:
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ?except IOError, e:
? ? ? ? ? ?print 'Could not open file:', e
? ? ? ?或
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ?except (IOError,AttrubitError), e:
? ? ? ? ? ?print 'Could not open file:', e
? ?try-except-else語句: try語句可以帶多個except子句,還可以有一個可選的else子句
? ?語法格式如下:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except Exception1[, reason]:
? ? ? ? ? ?suite_exception1
? ? ? ?except (Exception2, Exception3, ...)[, reason]: ? ? #一次捕獲多個異常時要定義為元組
? ? ? ? ? ?suite_
? ? ? ?...
? ? ? ?except: ? ? ? ? #空except語句用于捕獲一切異常;或者使用 except Exception,e: ? 也可以捕獲一切異常
? ? ? ? ? ?suite_
? ? ? ?else: ? ? ? ? ? ?#沒有出現錯誤時執行的代碼
? ? ? ? ? ?else_suite
? ? ? ? ? ?
? ? ? ?except 分句個數沒有限制,但else只能有一個;沒有異常發生時,else分句才會執行
? ? ? ?沒有符合的except分句時,異常會向上傳遞到程序中的之前進程的try中或者到進程的頂層(解釋器)
? ?
? ?try-finally語句:無論異常是否發生,finally子句都會執行。常用于定義必需進行的清理動作,如關閉文件或斷開服務器連接等。
? ?finally中的所有代碼執行完畢后會繼續向上一層引發異常
? ?語法:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?finally:
? ? ? ? ? ?finally_suite
? ? ? ? ? ?
? ?例:
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ? ? ?f1.write('hello world')
? ? ? ?finally:
? ? ? ? ? ?f1.close() ? ? ? ? ? ?
? ? ? ?關閉文件后繼續向上觸發異常
? ?exception 表示異常類型 reason表示接收異常原因的變量
? ?NameError
? ?IOError
? ?TypeError
? ?SyntaxError
? ?KeyError
? ?AttributeError
? ?IndexError
? ?ZeroDivisionError ?除0錯誤
??
? ?#!/usr/bin/python27
? ?#
? ?try:
? ?while True:
? ?d1 = raw_input("An integer:")
? ?if d1 == 'quit': break
? ?d2 = raw_input("Another integer:")
? ?print int(d1) / int(d2)
? ?except ZeroDivisionError, e:
? ?print "not 0"
? ?except ValueError:
? ?print "not string"
? ?except:
? ?print "Unkown error"
總結:try語句的分句形式
? ?except: ? ? ? ? 捕捉所有(其他)異常類型
? ?except name: ? ?只捕捉特定的異常
? ?except name, value: 捕捉所有列出的異常和其額外的數據(或實例)
? ?except (name1, name2): ? ? ?捕捉任何列出的異常
? ?except (name1, name2), value: ? 捕捉任何列出的異常,并取得其額外數據
? ?else: ? ? ? ? ? ? ? ? ? 如果沒有引發異常,就運行
? ?finally: ? ? ? ?總是會運行此代碼塊
? ?語法: ? ?
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except ?Exception1:
? ? ? ? ? ?suite1_exception1
? ? ? ?except (exception2, exception3):
? ? ? ? ? ?suite23_exception23
? ? ? ?...
? ? ? ?else:
? ? ? ? ? ?else_suite
? ? ? ?finally:
? ? ? ? ? ?finally_suite
? ? ? ?可以替換為在try-finally語句中嵌套try-except語句的形式。
? ?
? ? ? ?try:
? ? ? ? ? ?try:
? ? ? ? ? ? ? ?try_suite
? ? ? ? ? ?except ...
? ? ? ? ? ?except ...
? ? ? ? ? ?else ..
? ? ? ?finally:
? ? ? ? ? ?....
??
自定義異常:
? ?raise語句可顯式觸發異常(即手機觸發異常)
? ? ? ?raise [SomeException [, args [, traceback]]]
? ? ? ? ? ?SomeException:可選,異常的名字,僅能使用字符串、類或實例
? ? ? ? ? ?args:可選,以元組的形式傳遞給異常的參數
? ? ? ? ? ?traceback:可選,異常觸發時新生成的一個用于異常--正常化的跟蹤記錄,多用于重新引發異常時使用。 ? ? ? ? ? ? ? ?
? ?例:
? ? ? ?def f1(seq1,seq2):
? ? ? ? ? ?if not seq1 or not seq2:
? ? ? ? ? ? ? ?raise ValueError, "Seq must not be empty."
? ? ? ? ? ?print [ (x,y) for x in seq1 fro y in seq2 ]
? ? ? ? ? ?
? ? ? ?l1 = [1,2,3]
? ? ? ?l2 = ['a','b','c']
? ? ? ?f1(l1,l2)
? ? ? ?l3 = []
? ? ? ?f1(l1,l3) ? ? ? 提示自定義的異常
? ? ? ?
? ?try:
? ? ? ?f1 = open('/tmp/a/b.txt','r')
? ?except BaseException:
? ? ? ?print "Eroor occurs" ? ?
? ?#注意:BaseException是所有異常對象的父類,所以它可以接收所有的異常。
? ?
? ?try:
? ? ? ?a = 3 / 0
? ?except BaseException:
? ? ? ?print "Error occurs."
? ? ? ?
? ?自定義異常類:
? ? ? ?自定義異常類和多重繼承。較有效的方法是從自定義異常類和標準異常類進行多重繼承,例如:
? ? ? ? ? ?class CustomAttributeError(CustomException,AttributeError):
? ? ? ? ? ? ? ?pass
? ? ? ?標準庫中使用的其它異常
? ? ? ? ? ?python標準庫中的許多模塊都定義了自己的異常類,如socket中的socket.error; 等同于自定義的異常類
? ? ? ? ? ?
? ?例:
? ? ? ?class MyError(Exception):
? ? ? ? ? ?def __init__(self,msg):
? ? ? ? ? ? ? ?self.Message=msg
? ? ? ? ? ?def __str__(self):
? ? ? ? ? ? ? ?return self.Message
? ? ? ? ? ?
? ? ? ?try:
? ? ? ? ? ?a=1
? ? ? ? ? ?raise MyError('錯誤測試')
? ? ? ?except Exception,e:
? ? ? ? ? ?print e
? ?assert語句:
? ?assert語句用于在程序中引入調度代碼,語法如下:
? ? ? ?assert ?condition[, expression]
? ? ? ?說明:如果condition條件滿足,則assert不做任何操作;如果condition條件不滿足,則assert使用expression作為參數實例化AssertionError并引發結果實例(即生成一個自定義的斷言異常對象)
? ? ? ?注意:如果運行python時使用了-O優化選項,則assert將是一個空操作:編譯器不為assert語句生成代碼
? ? ? ?運行python時不使用-O選項,則__debug__內置變量為True,否則其值為False
? ? ? ?assert語句相當于下面的代碼:
? ? ? ? ? ?if __debug__:
? ? ? ? ? ? ? ?if not condition:
? ? ? ? ? ? ? ? ? ?raise AssertionError, <expression>
? ? ? ?assert實現:手動觸發異常。 ? ?
? ? ? ?assert 1 == 0, 'Something wrong'
本文轉自 meteor_hy 51CTO博客,原文鏈接:http://blog.51cto.com/caiyuanji/1834031,如需轉載請自行聯系原作者
? ?python在運行時錯誤稱為異常
? ? ? ?語法錯誤:軟件的結構上有錯誤而導致不能被解釋器解釋或不能被編譯器編譯。
? ? ? ?邏輯錯誤:由于不完整或不合法的輸入所致,也可能是邏輯無法生成、計算或者出結果需要的過程無法執行等。
? ?默認情況下:python腳本執行過程中出現異常后,腳本執行將被終止。
? ?
? ?python 異常是一個對象,表示錯誤或意外的情況
? ?在python檢測到一個錯誤時,將觸發一個異常:
? ? ? ?python可以通過異常傳導機制傳遞一個異常對象,發出一個異常情況出現的信號。
? ? ? ?程序員也可以在代碼中托運觸發異常
? ?python異常也可以理解為:程序出現了錯誤,而在正??刂屏饕酝獠扇〉男袨?/span>
? ? ? ?第一階段:解釋器觸發異常,此時當前程序流將被打斷。
? ? ? ?第二階段:異常處理,如忽略非致命錯誤、減輕錯誤帶來的影響等。
異常的功用
? ?錯誤處理:
? ? ? ?python的默認處理:停止程序,打印錯誤消息
? ? ? ?使用try語句處理異常,并從異常中恢復
? ?事件通知:
? ? ? ?用于發出有效狀態信號
? ?特殊情況處理:
? ? ? ?無法調整代碼去處理的場景
? ?終止行為:
? ? ? ?try/finally語句可確保執行必需的結束處理機制
? ?非常規控制流程:
? ? ? ?異常是一種高級跳轉(goto)機制
異常對象
? ?python異常是內置的經典類exception的子類的實例
? ? ? ?為了向后兼容,python還允許使用字符串或任何經典類實例
? ? ? ?python2.5之后,exception是從BaseException繼承的新式類(即exception的父類是BaseException類)
? ?python自身引發的所有異常都是Exception的子類的實例
? ?大多的標準異常都是由StandardError派生的,其有3個抽象的子類
? ? ? ?ArithmeticError:由于算術錯誤而引發的異常基類;包括:OverflowError、ZeroDivisionError、FloatingPorintError
? ? ? ?LookupError:容器在接收到一個無效的鍵或索引時引發的異常的基類;包括:IndexError、KeyError
? ? ? ?EnvironmentError:由于外部原因而導致的異常的基類;包括:IOError、OSError、WindowsError
? ? ? ? ? ?
標準異常類
? ?AssertionError:斷言語句失敗
? ?AttributeError:屬性引用或賦值失敗
? ?FloatingPointError:浮點型運算失敗
? ?IOError:I/O操作失敗
? ?ImportError:import語句不能找到要導入的模塊,或者不能找到該模塊特別請求的名稱。
? ?IndentationError:解析器遇到了一個由于錯誤的縮進而引發的語法錯誤
? ?IndexError:用來索引序列的整數超出了范圍。
? ?KeyError:用來索引映射的鍵不在映射中
? ?KeyboardInterrupt:用戶按了中斷鍵(ctrl+c、ctrl+break、delete鍵)
? ?MemoryError:運算耗盡內存
? ?NameError:引用了一個不存在的變量名
? ?NotImplementedError:由抽象基類引發的異常,用于指示一個具體的子類必須覆蓋一個方法
? ?OSError:由模塊os中的函數引發的異常,用來指示平臺相關的錯誤
? ?OverflowError:整數運算的結果太大導致溢出
? ?SyntaxError:語法錯誤
? ?SystemError:python解釋器本身或某些擴展模塊中的內部錯誤
? ?TypeError:對某對象執行了不支持的操作
? ?UnboundLocalError:引用未綁定值的本地變量
? ?UnicodeError:在Unicode的字符串之間進行轉換時發生的錯誤
? ?ValueError:應用于某個對象的操作或函數,這個對象具有正確的類型,但確有不適當的值
? ?WindowsError:模塊OS中的函數引發的異常,用于指示與windowsSHUDR QAYK
? ?ZeroDivisionError:除數為0引發的異常 ?
檢測和處理異常:
? ?異常通過try語句來檢測:任何在try語句塊中的代碼都會被監測,以檢查有無異常發生。
? ?tr語句主要有兩種形式:
? ? ? ?try-except:檢測和處理異常
? ? ? ? ? ?可以有多個except;支持使用else子句處理沒有探測異常的執行的代碼
? ? ? ?try-finally:僅檢查異常并做一些必要的清理工作
? ? ? ? ? ?僅能有一個finally
? ?try語句的復合形式: try-except-finally ? ?
? ?注意:try語句中的任何語句出現異常后,就會跳至定義的相關except中,而try結構中發生異常之后的其它語句就不會再執行。
? ?
? ?try - except語句:定義了進程異常監控的一段代碼,并且提供了處理異常的機制
? ?語法:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except Exception[, reason]:
? ? ? ? ? ?except_suite
? ? ? ?或
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except (Exception1,Exception2[,...])[, reason]:
? ? ? ? ? ?except_suite
? ? ? ? ? ?
? ?例:
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ?except IOError, e:
? ? ? ? ? ?print 'Could not open file:', e
? ? ? ?或
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ?except (IOError,AttrubitError), e:
? ? ? ? ? ?print 'Could not open file:', e
? ?try-except-else語句: try語句可以帶多個except子句,還可以有一個可選的else子句
? ?語法格式如下:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except Exception1[, reason]:
? ? ? ? ? ?suite_exception1
? ? ? ?except (Exception2, Exception3, ...)[, reason]: ? ? #一次捕獲多個異常時要定義為元組
? ? ? ? ? ?suite_
? ? ? ?...
? ? ? ?except: ? ? ? ? #空except語句用于捕獲一切異常;或者使用 except Exception,e: ? 也可以捕獲一切異常
? ? ? ? ? ?suite_
? ? ? ?else: ? ? ? ? ? ?#沒有出現錯誤時執行的代碼
? ? ? ? ? ?else_suite
? ? ? ? ? ?
? ? ? ?except 分句個數沒有限制,但else只能有一個;沒有異常發生時,else分句才會執行
? ? ? ?沒有符合的except分句時,異常會向上傳遞到程序中的之前進程的try中或者到進程的頂層(解釋器)
? ?
? ?try-finally語句:無論異常是否發生,finally子句都會執行。常用于定義必需進行的清理動作,如關閉文件或斷開服務器連接等。
? ?finally中的所有代碼執行完畢后會繼續向上一層引發異常
? ?語法:
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?finally:
? ? ? ? ? ?finally_suite
? ? ? ? ? ?
? ?例:
? ? ? ?try:
? ? ? ? ? ?f1 = open('/tmp/a.txt','r')
? ? ? ? ? ?f1.write('hello world')
? ? ? ?finally:
? ? ? ? ? ?f1.close() ? ? ? ? ? ?
? ? ? ?關閉文件后繼續向上觸發異常
? ?exception 表示異常類型 reason表示接收異常原因的變量
? ?NameError
? ?IOError
? ?TypeError
? ?SyntaxError
? ?KeyError
? ?AttributeError
? ?IndexError
? ?ZeroDivisionError ?除0錯誤
??
? ?#!/usr/bin/python27
? ?#
? ?try:
? ?while True:
? ?d1 = raw_input("An integer:")
? ?if d1 == 'quit': break
? ?d2 = raw_input("Another integer:")
? ?print int(d1) / int(d2)
? ?except ZeroDivisionError, e:
? ?print "not 0"
? ?except ValueError:
? ?print "not string"
? ?except:
? ?print "Unkown error"
總結:try語句的分句形式
? ?except: ? ? ? ? 捕捉所有(其他)異常類型
? ?except name: ? ?只捕捉特定的異常
? ?except name, value: 捕捉所有列出的異常和其額外的數據(或實例)
? ?except (name1, name2): ? ? ?捕捉任何列出的異常
? ?except (name1, name2), value: ? 捕捉任何列出的異常,并取得其額外數據
? ?else: ? ? ? ? ? ? ? ? ? 如果沒有引發異常,就運行
? ?finally: ? ? ? ?總是會運行此代碼塊
? ?語法: ? ?
? ? ? ?try:
? ? ? ? ? ?try_suite
? ? ? ?except ?Exception1:
? ? ? ? ? ?suite1_exception1
? ? ? ?except (exception2, exception3):
? ? ? ? ? ?suite23_exception23
? ? ? ?...
? ? ? ?else:
? ? ? ? ? ?else_suite
? ? ? ?finally:
? ? ? ? ? ?finally_suite
? ? ? ?可以替換為在try-finally語句中嵌套try-except語句的形式。
? ?
? ? ? ?try:
? ? ? ? ? ?try:
? ? ? ? ? ? ? ?try_suite
? ? ? ? ? ?except ...
? ? ? ? ? ?except ...
? ? ? ? ? ?else ..
? ? ? ?finally:
? ? ? ? ? ?....
??
自定義異常:
? ?raise語句可顯式觸發異常(即手機觸發異常)
? ? ? ?raise [SomeException [, args [, traceback]]]
? ? ? ? ? ?SomeException:可選,異常的名字,僅能使用字符串、類或實例
? ? ? ? ? ?args:可選,以元組的形式傳遞給異常的參數
? ? ? ? ? ?traceback:可選,異常觸發時新生成的一個用于異常--正常化的跟蹤記錄,多用于重新引發異常時使用。 ? ? ? ? ? ? ? ?
? ?例:
? ? ? ?def f1(seq1,seq2):
? ? ? ? ? ?if not seq1 or not seq2:
? ? ? ? ? ? ? ?raise ValueError, "Seq must not be empty."
? ? ? ? ? ?print [ (x,y) for x in seq1 fro y in seq2 ]
? ? ? ? ? ?
? ? ? ?l1 = [1,2,3]
? ? ? ?l2 = ['a','b','c']
? ? ? ?f1(l1,l2)
? ? ? ?l3 = []
? ? ? ?f1(l1,l3) ? ? ? 提示自定義的異常
? ? ? ?
? ?try:
? ? ? ?f1 = open('/tmp/a/b.txt','r')
? ?except BaseException:
? ? ? ?print "Eroor occurs" ? ?
? ?#注意:BaseException是所有異常對象的父類,所以它可以接收所有的異常。
? ?
? ?try:
? ? ? ?a = 3 / 0
? ?except BaseException:
? ? ? ?print "Error occurs."
? ? ? ?
? ?自定義異常類:
? ? ? ?自定義異常類和多重繼承。較有效的方法是從自定義異常類和標準異常類進行多重繼承,例如:
? ? ? ? ? ?class CustomAttributeError(CustomException,AttributeError):
? ? ? ? ? ? ? ?pass
? ? ? ?標準庫中使用的其它異常
? ? ? ? ? ?python標準庫中的許多模塊都定義了自己的異常類,如socket中的socket.error; 等同于自定義的異常類
? ? ? ? ? ?
? ?例:
? ? ? ?class MyError(Exception):
? ? ? ? ? ?def __init__(self,msg):
? ? ? ? ? ? ? ?self.Message=msg
? ? ? ? ? ?def __str__(self):
? ? ? ? ? ? ? ?return self.Message
? ? ? ? ? ?
? ? ? ?try:
? ? ? ? ? ?a=1
? ? ? ? ? ?raise MyError('錯誤測試')
? ? ? ?except Exception,e:
? ? ? ? ? ?print e
? ?assert語句:
? ?assert語句用于在程序中引入調度代碼,語法如下:
? ? ? ?assert ?condition[, expression]
? ? ? ?說明:如果condition條件滿足,則assert不做任何操作;如果condition條件不滿足,則assert使用expression作為參數實例化AssertionError并引發結果實例(即生成一個自定義的斷言異常對象)
? ? ? ?注意:如果運行python時使用了-O優化選項,則assert將是一個空操作:編譯器不為assert語句生成代碼
? ? ? ?運行python時不使用-O選項,則__debug__內置變量為True,否則其值為False
? ? ? ?assert語句相當于下面的代碼:
? ? ? ? ? ?if __debug__:
? ? ? ? ? ? ? ?if not condition:
? ? ? ? ? ? ? ? ? ?raise AssertionError, <expression>
? ? ? ?assert實現:手動觸發異常。 ? ?
? ? ? ?assert 1 == 0, 'Something wrong'
本文轉自 meteor_hy 51CTO博客,原文鏈接:http://blog.51cto.com/caiyuanji/1834031,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的python Exception(异常处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怪兽级性能,用代码玩转Excel!葡萄城
- 下一篇: 可变数据类型和不可变数据类型