1. 程式人生 > >15.1異常處理

15.1異常處理

Python 異常

異常處理
try:
    #代碼塊,邏輯
    inp=input("序號:")
    i=int(inp)
except Exception as e:
    #e是一個Exception的對象,裏面封裝了錯誤信息
    #錯誤時執行
    i=1
    print(e)
    # invalid literal for int() with base 10: ‘w‘
    print(i)

異常有多種類型

try:
    li=[1,2,3]
    li[999]
except IndexError as e:
    print("IndexError:",e)
try:
    int("dhj")  #如果ValueError不能捕獲,就會報錯
    li1=[1,2,3]  #一旦出現錯誤,try後面的代碼就不再執行了
    li1[999]
except ValueError as e:
    print("ValueError:",e)
except IndexError as e:
    print("IndexError",e)
except Exception as e:
    print("Exception:",e)
else:
    print("ok!")
#前面都沒錯,執行else
finally:
    print("go on ……")
#不管出不出錯,都要執行finally

# IndexError,ValueError都是Exception的子類
#日誌分類時候,需要對細分的錯誤放在前面,Exception放在最後

主動拋出異常

#主動拋出異常
try:
    #主動觸發異常
    raise Exception("異常123")  #創建了一個Exception()對象
except Exception as e:
    print(e)
# 異常123

日誌實例

def db():
    return False

def index():
    try:

        rh="hgd"
        rh=int(rh)

        result=db()
        if not result:
            raise Exception("數據庫處理錯誤")

    except Exception as e:
        str_error=str(e)
        print(str_error)
        f=open("log.txt","a",encoding="utf-8")
        f.write(str_error)
        f.close()

index()

自定義異常

#自定義異常
class olderror(Exception):

    def __init__(self,msg):
        self.message=msg

    def __str__(self):
        return self.message

a=olderror("ojj")
print(a)
# ojj

try:
    raise olderror("HEHE")
except olderror as e:
    print(e)

# HEHE

斷言

# assert 斷言,條件成立,繼續執行,條件不成立,報錯,不能往後執行
# assert 條件
print(23)
assert 1==2
print(456)

15.1異常處理