Python之物件導向(七)異常處理

2022-09-15 17:48:15 字數 3953 閱讀 7552

程式中的錯誤分為兩種:語法錯誤和邏輯錯誤

語法錯誤:

if

#------------------

print(haha

邏輯錯誤:

#使用者輸入不完整(比如輸入為空)或者輸入非法(輸入不是數字)

num=input(">>: ")

int(num)

什麼是異常:**發生異常錯誤之後,你的程式就中斷了

什麼是異常處理:當**出現異常時,我通過某種方式不讓你程式中斷,合理的跳出去,叫做異常處理

為什麼要有異常處理?使用者體驗良好,使你的**更有健壯性容錯性

異常處理的兩種方式:

錯誤舉例:

# 觸發indexerror

l=['egon','aa']

l[3]

# 觸發keyerror

dic=

dic['age']

#觸發valueerror

s='hello'

int(s)

常用異常:

attributeerror #試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror #輸入/輸出異常;基本上是無法開啟檔案

importerror #無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror #語法錯誤(的子類) ;**沒有正確對齊

indexerror #下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror #試圖訪問字典裡不存在的鍵

keyboardinterrupt #ctrl+c被按下

nameerror #使用乙個還未被賦予物件的變數

syntaxerror #python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror #傳入物件型別與要求的不符合

unboundlocalerror #試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror #傳入乙個呼叫者不期望的值,即使值的型別是正確的

單分支捕獲異常:

#基本語法:

try:

被檢測的**塊

except 異常型別:

try 一旦檢測異常,就執行這個位置的邏輯

try:

num=int(input("----"))#出現valueerror錯誤之後,直接跳轉到except語句

dic=

print(dic['age'])

except valueerror:

print(66)

多分支捕獲異常

try:

num=int(input("----"))#出現valueerror錯誤之後,直接跳傳到except語句

dic=

print(dic['age'])

l1=[1,2]

print(l1[100])

print(11)

except valueerror:

print('輸入有非數字元素')

except keyerror:

print('沒有此鍵')

except indexerror:

print('沒有此下標')

print(666)

萬能異常捕獲:處理所有python識別的異常

try:

dic=

l1=[1,2]

print(l1[100])

print(111)

for i in 123:

pass

except exception as e:

print(e)

print(666)

什麼時候用萬能?什麼時候用多分支?:如果你對錯誤資訊不關心,只是想要派出錯誤讓程式繼續執行,就用萬能異常 你對錯誤資訊要進行明確的分流,讓你的程式多元化開發

多分支+萬能異常

def func():

pass

def func1():

pass

dic =

try:

num = int(input('請輸入序號'))

dic[num]()

except valueerror:

print('請輸入數字')

except keyerror:

print('請輸入範圍內的序號')

except exception:

print('程式出現意料之外的錯誤....')

try.....else......finally

try:

dic =

print(dic['age'])

l1 = [1, 2]

print(l1[100])

print(111)

except keyerror:

print('沒有此鍵')

except indexerror:

print('沒有此下標')

else:

print('如果沒有出現異常則執行這裡')

finally:

print('finally 666')

#except必須依賴於try,else必須依賴於except和try

#finally只是依賴於try

#當沒有異常執行else finally 有異常則執行異常 和finally

#finally 用在關閉資料庫連線,檔案控制代碼關閉,資料儲存等,用到finally

主動觸發異常

class a:

def func(self):

raise exception("使用父類方法")

class b(a):

def func(self):

print("in b func")

class c(a):

def func(self):

print("in c func")

class d(a):

def func1(self):

print("in d func1")

def function(obj):

obj.func()

obj1 = d()

function(obj1)

# 結果:

exception: 使用父類方法

斷言:展現一種強硬的態度

name="alex"

n1=input("請輸入")

assert name=n1

print(11)

print(22)

自定義異常

python中提供的錯誤型別很多種,但是不是全部的錯誤

class liyeerror(baseexception):

def __init__(self,msg):

self.msg=msg

def __str__(self):

return self.msg

try:

# 三行

raise liyeerror('socket.connent.....')

except liyeerror as e: # e = liyeerror('型別錯誤')

print(e)

try...except的方式比較if的方式的好處

改善**容錯性

增強程式魯棒性

python之物件導向

類 是乙個特殊的物件,class a 定義的類屬於 類物件 類的例項 obj a 屬於 例項物件 例項屬性 init 定義例項屬性 例項方法 self 物件名.方法名 類屬性 針對類物件定義的屬性,訪問類屬性方法 類名.類屬性 物件名.類屬性 類方法 針對類物件定義的方法,內部可直接訪問類屬性和其他...

python之物件導向

python中一切皆物件 class 定義的類屬於類物件 obj1 屬於例項物件 在程式執行時,類同樣會載入到記憶體,類物件在記憶體中只有乙份,使用乙個類可以建立出很多例項物件 除了封裝例項的屬性和方法外,類物件還可以擁有自己的屬性和方法 類屬性和例項屬性 類屬性就是給類物件中定義屬性,通常用來記錄...

python之物件導向

物件導向介紹 一 物件導向和面向過程 面向過程 核心過程二字,過程即解決問題的步驟,就是先幹什麼後幹什麼 基於該思想寫程式就好比在這是一條流水線,是一種機械式的思維方式 優點 複雜的過程流程化 缺點 擴充套件性差 物件導向 核心是物件二字,物件指特徵與技能的結合體 基於該思想編寫程式就好比在創造乙個...