Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
主要介紹 python 中異常的繼承關(guān)系,及如何自定義異常
1. 異常的繼承關(guān)系
BaseException # 所有異常的基類 +-- SystemExit # 解釋器請(qǐng)求退出 +-- KeyboardInterrupt 用戶中斷執(zhí)行(通常是輸入^C) +-- GeneratorExit # 生成器(generator)發(fā)生異常來(lái)通知退出 +-- Exception # 常規(guī)異常的基類 +-- StopIteration # 迭代器沒(méi)有更多的值 +-- StandardError # 標(biāo)準(zhǔn)錯(cuò)誤 | +-- 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 +-- FutureWarnin +-- ImportWarnin +-- UnicodeWarnin +-- BytesWarning
2. 自定義異常
#自定義異常 需要繼承Exception
class MyException(Exception):
def __init__(self, *args):
self.args = args
if __name__ == '__main__':
try:
raise MyException("自定義異常")
except MyException as e:
print e
3. 異常捕獲
# 示例 str1 = 'abc' try: int(str1) except IndexError as e: print e except KeyError as e: print e except ValueError as e: print e else: print 'try內(nèi)正常處理' finally: print '無(wú)論異常與否,都會(huì)執(zhí)行我'
4. 主動(dòng)觸發(fā)異常
# raise xxx
def test_zero(num):
try:
if num == 0:
raise ValueError('參數(shù)錯(cuò)誤')
return num
except Exception as e:
print e
test_zero(0)
5. 采用traceback模塊查看異常
異常發(fā)生時(shí),Python 能“記住”引發(fā)的異常以及程序的當(dāng)前狀態(tài)。
Python 維護(hù)著traceback(跟蹤)對(duì)象,其中含有異常發(fā)生時(shí)與函數(shù)調(diào)用堆棧有關(guān)的信息。
異??赡茉谝幌盗星短纵^深的函數(shù)調(diào)用中引發(fā)。
程序調(diào)用每個(gè)函數(shù)時(shí),Python 會(huì)在“函數(shù)調(diào)用堆?!钡钠鹗继幉迦牒瘮?shù)名。一旦異常被引發(fā),Python 會(huì)搜索一個(gè)相應(yīng)的異常處理程序。如果當(dāng)前函數(shù)中沒(méi)有異常處理程序,當(dāng)前函數(shù)會(huì)終止執(zhí)行,Python 會(huì)搜索當(dāng)前函數(shù)的調(diào)用函數(shù),并以此類推,直到發(fā)現(xiàn)匹配的異常處理程序,或者Python 抵達(dá)主程序?yàn)橹?。這一查找合適的異常處理程序的過(guò)程稱為“堆棧輾轉(zhuǎn)開(kāi)解”(StackUnwinding)。
解釋器一方面維護(hù)著與放置堆棧中的函數(shù)有關(guān)的信息,另一方面也維護(hù)著與已從堆棧中“輾轉(zhuǎn)開(kāi)解”的函數(shù)有關(guān)的信息。
#示例 def div(num1, num2): try: result = num1/num2 return result except Exception as e: traceback.print_exc() print div(1, 0)
#執(zhí)行結(jié)果 Traceback (most recent call last): None File "F:/Technology-20161005/python/python_project/demo/exceptiondemo/exceptiondemo.py", line 17, in div result = num1/num2 ZeroDivisionError: integer division or modulo by zero
# 可以將異常信息寫到文件中
traceback.print_exc(file=open('1.txt','w+'))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pyecharts之特殊圖表的實(shí)現(xiàn)示例
本文主要介紹了Pyecharts之特殊圖表的實(shí)現(xiàn)示例,包括象形圖、水球圖和日歷圖的定制方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01
python調(diào)用matlab的m自定義函數(shù)方法
今天小編就為大家分享一篇python調(diào)用matlab的m自定義函數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
一文教你如何用Python輕輕松松操作Excel,Word,CSV
數(shù)據(jù)處理是 Python 的一大應(yīng)用場(chǎng)景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件。本文將為大家詳細(xì)介紹一下如何用Python輕輕松松操作Excel、Word、CSV,需要的可以參考一下2022-02-02
python的unittest測(cè)試類代碼實(shí)例
這篇文章主要介紹了python的unittest測(cè)試類代碼實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12
Python中BaseHTTPRequestHandler實(shí)現(xiàn)簡(jiǎn)單的API接口
本文主要介紹了Python中BaseHTTPRequestHandler實(shí)現(xiàn)簡(jiǎn)單的API接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

