python3 異常、自定義異常
阿新 • • 發佈:2019-01-31
異常型別:
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歲之間