1. 程式人生 > >python3 異常、自定義異常

python3 異常、自定義異常

異常型別:

try:

   語句體
except 異常型別:
   處理語句

列:

try:
    n=1/0
except ZeroDivisionError:
    print('出現異常')
》》》出現異常


另一種方法:
try:
   語句體
except (異常型別1,異常型別2):
   處理語句

列:

try:
    n=1/0
s=int('hello world!')
except (ZeroDivisionError,ValueError):
    print('出現異常')
》》》出現異常

try裡面有兩句語句,可以登出其中的任意一條,它都會報錯,只要在try裡面捕獲到異常,它會直接跳到except,對比異常型別後直接執行print



所有異常:
try:
   語句體
except baseException:
   處理語句
列:
try:
    n=1/0
except BaseException:
    print('出現異常')

》》》出現異常

BaseException是所有異常的父類,如果你只想知道程式碼有沒有出錯,但又不想知道報的什麼型別的錯誤,就可以用這種

try:
   語句體
except 異常型別:
   處理語句
else

   沒有異常執行

列:

try:
    n=1/2
except BaseException:
    print('出現異常')
else:
    print('沒有異常型別')
》》》沒有異常型別

try裡面沒有異常時會執行else語句塊


try:
except:
捕獲所有異常

列:

try:
    n=1/0
except:
    print('出現異常')
》》》出現異常

如果except後面不寫異常的型別,那麼它會預設捕獲所有異常,這和上面那個BaseException大同小異


try:
excep 異常型別:

finally:最終執行的內容要寫在finally中:

列:

try:
    n=1/0
except:
    print('出現異常')
finally:
    print('無論有無異常,都會執行')
》》》出現異常
》》》無論有無異常,都會執行

一般finally裡面放關閉檔案的指令

異常的呼叫:

列:

def testError():
    n
=1/0 try: testError() except: print('除數不能為0')
》》》除數不能為0
還有另一個列子:
def test():
    lst = [1, 2, 3, 4, 5]
    n=lst[len(lst)]
    print(n)
def test2():
    try:
        test()
    except IndexError as t:
        print('下標超出')
        print(t)
test2()
》》》下標超出
》》》list index out of range
這裡的as t 的意識是將異常重新命名為t,然後再將異常輸出
接下來就是最重要的一點了,那就是自定義異常,如果你不想用系統給出的型別,而是想自己定義

自定義異常類:一般繼承Exception,也可繼承baseException

class TanError(Exception):
    def __init__(self,age):
        self.age=age
    def __str__(self):
        return self.age

def ag():
    age=int(input('輸入年齡:'))
    if age<=0 or age>100:
        raise TanError('年齡只能在0到100歲之間')
//raise 會丟擲一個異常
try:
     ag()
except TanError as tan:
    print(tan)
》》》輸入年齡:-2
》》》年齡只能在0到100歲之間