日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Python異常對(duì)象Exception基礎(chǔ)類(lèi)異常捕捉_python

作者:jiangwei0512 ? 更新時(shí)間: 2022-07-31 編程語(yǔ)言

異常對(duì)象

Python中遇到錯(cuò)誤后,會(huì)引發(fā)異常。

Python中使用異常對(duì)象來(lái)表示異常情況。

如果異常對(duì)象未被處理或者捕捉,程序就會(huì)用所謂的回溯(traceback)來(lái)終止執(zhí)行。

下面是一個(gè)例子:

def func1():
    raise Exception
if __name__ == "__main__":
    func1()

執(zhí)行之后報(bào)錯(cuò):

(venv) E:\Codes\python_everything\begining-python\src\08>list8-2.py
Traceback (most recent call last):
  File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 19, in <module>
    func1()
  File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
    raise Exception
Exception

異常有不同的類(lèi)型,Exception是基礎(chǔ)類(lèi),下面還有各種子類(lèi):

 +-- 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

還可以通過(guò)繼承Exception來(lái)實(shí)現(xiàn)自己的類(lèi):

class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    func2()

異常捕捉

異常可以被捕捉,需要使用try...except...語(yǔ)句:

class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func2()
    except SomeError:
        print("Some error happened")

這里捕捉到了參數(shù),所以就不會(huì)回溯:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Some error happened

但是如果是其它的異常:

def func1():
    raise Exception
class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func1()
    except SomeError:
        print("Some error happened")

這里的Exception就沒(méi)有被捕獲,所以還是會(huì)回溯:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
Traceback (most recent call last):
  File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 27, in <module>
    func1()
  File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
    raise Exception
Exception

如果沒(méi)有出現(xiàn)異常,則會(huì)繼續(xù)往下執(zhí)行,但是這里可以有else語(yǔ)句來(lái)執(zhí)行沒(méi)有異常時(shí)可以執(zhí)行的語(yǔ)句,使整個(gè)邏輯更通順:

if __name__ == "__main__":
    try:
        print("No exception")
    except SomeError:
        print("Some error happened")
    else:
        print("No error happened")

結(jié)果如下:

(venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
No exception
No error happened

但是有時(shí)即使發(fā)生了無(wú)法捕捉的異常,也想要執(zhí)行一些語(yǔ)句,這個(gè)時(shí)候就可以使用finally語(yǔ)句:

def func1():
    raise Exception
class SomeError(Exception): pass
def func2():
    raise SomeError
if __name__ == "__main__":
    try:
        func1()
    except SomeError:
        print("Some error happened")
    else:
        print("No error happened")
    finally:
        print("Do something")

Python中更傾向于使用try...except...這樣的語(yǔ)句來(lái)代替if...else..語(yǔ)句。

原文鏈接:https://blog.csdn.net/jiangwei0512/article/details/106596297

欄目分類(lèi)
最近更新