程式中的錯誤分為兩種:語法錯誤和邏輯錯誤
語法錯誤:
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之物件導向
物件導向介紹 一 物件導向和面向過程 面向過程 核心過程二字,過程即解決問題的步驟,就是先幹什麼後幹什麼 基於該思想寫程式就好比在這是一條流水線,是一種機械式的思維方式 優點 複雜的過程流程化 缺點 擴充套件性差 物件導向 核心是物件二字,物件指特徵與技能的結合體 基於該思想編寫程式就好比在創造乙個...