python 约束与异常处理
一、類的約束
1、約束就是對類的約束。其實就是父類對子類進行約束,子類必須要寫xxx方法。
2、抽象:就是當我們沒法對一個功能或者一個屬性進行精確的表述,一般都采用抽象的方式給出。
(1)抽象類的書寫規范
from abc import ABCMeta,abstractmethod # 引入抽象方法的模塊class Base(metaclass=ABCMeta): #定義抽象類 maetaclass=ABCmeta@abstractmethod#抽象方法的關鍵字def 方法(self):pass(2)抽象類相關的知識點:
a:一個類包含抽象方法,一定屬于抽象類
b:抽象類,可以包含正常的方法(實例方法、類方法、靜態方法)
c:抽象類不能創建對象
d:如果子類未對父類的抽象方法進行重寫,該類也是一個抽象類,無法創建對象
f:接口,類中全都是抽象方法
from abc import ABCMeta,abstractmethod # 引入抽象方法的模塊class Base(metaclass=ABCMeta): #定義抽象類 maetaclass=ABCmeta@abstractmethod#抽象方法的關鍵字def he(self):passdef chi(self):print("吃什么")class Foo(Base):def shui(self):print ("睡你麻痹") f=Foo()#Can't instantiate abstract class Foo with abstract methods he f.shui() # 只要類包含了抽象方法就不能創建對象
2、python中約束有的兩種方式:(貼吧登陸)
(1)使用抽象類和抽象方法
from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta):@abstractmethod #定義一個抽象的login方法def login(self):pass class Normal(Base):def login(self):print("普通用戶登錄") class Memer(Base):def login(self):print("吧務登陸") class Admin(Base):def login(self):print("管理員登錄")(2)使用拋出異常,并且拋出的異常時NotImplementError。這樣比較專業,并且錯誤比較明確。
#如果子類沒有重寫父類的方法,執行了父類的方法則拋出異常 class Base:def login(self):raise NotImplementedError("你沒有重寫該方法,滾回去重寫") class Normal(Base):def login(self):print("普通用戶登錄") # class Memer(Base): # def login(self): # print("吧務登陸") class Memer(Base):pass class Admin(Base):def login(self):print("管理員登錄") n=Normal() m=Memer() a=Admin() n.login() m.login()#NotImplementedError: 你沒有重寫該方法,滾回去重寫 a.login()?
二、異常處理
1、格式:
try:'''進行操作''' except Exception as e:#Exception是異常的父類,可以捕獲所有的異常'''捕獲異常后,給予提示語''' else:'''try中沒有出現錯誤,執行這里的操作''' finally:'''不管出不出錯都會執行這里的操作'''解讀:程序先執行try中的操作,如果出錯了,就會走到except里面,進行相應的操作,如果沒有出錯,就直接執行else里面的操作,不管出不出錯都會執行最后的finally.
2、拋出異常
(1)關鍵字 raise
def cul(a,b):if (type(a)==int or type(a)==float)and (type(b)==int or type(b)==float):return a+belse:raise Exception("請給我int或者float")#拋出異常,異常Exception ret=cul(3,"麻辣燙")#Exception: 請給我int或者float(2)自定義異常??
實現:定義一個異常繼承Exception就可以實現自定義異常了(Exception是異常的基類,)
class GenderException(Exception):#定義了一個性別異常passclass Person:def __init__(self,name,gender):self.name=nameself.gender=genderdef got_nan_yushi(self):'''x洗澡:return:'''if self.gender=="男":print("歡迎光臨")else:raise GenderException("性別錯了") #拋出自定義異常3、異常處理
(1)處理除數不能是0的異常
# ZeroDivisionError try: #把需要處理的對象放入其中print(10/0) except ZeroDivisionError as e:print("0不能做除數") # 異常處理結果顯示:0不能做除數(2)獲取錯誤信息 :traceback (目的主要是方便程序員排查錯誤)
import traceback #插入堆棧模塊 # traceback這個模塊可以獲取到我們每個?法的調用信息 try: #把需要處理的對象放入其中print(10/0) except ZeroDivisionError as e:val=traceback.format_exc()#獲取堆棧信息print("0不能做除數")print()print(val) # 異常處理結果顯示:0不能做除數 結果: 0不能做除數Traceback (most recent call last):File "E:/qishi/Day19 約束/04異常處理.py", line 79, in <module>print(10/0) ZeroDivisionError: division by zero?
?三、日記處理
1、基本步驟
1. 導入logging模塊.
2. 簡單配置?下logging
3. 出現異常的時候(except). 向?志?寫錯誤信息
2、配置信息如下
logging.basicConfig(filename='x1.txt', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=10) # 當前配置表示 10以上的分數會被寫??件 # # 日記 # 1、導入logging模塊 # 2、簡單配置;一下logging # 3、出現異常的時候,向日記里面寫錯誤信息 import logging import traceback # filename: ?件名 # format: 數據的格式化輸出. 最終在?志?件中的樣? # 時間-名稱-級別-模塊: 錯誤信息 # datefmt: 時間的格式 # level: 錯誤的級別權重, 當錯誤的級別權重?于等于leval的時候才會寫??件 logging.basicConfig(filename='x1.txt', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=20) # 當前配置表示 10以上的分數會被寫??件 # CRITICAL = 50 # FATAL = CRITICAL # ERROR = 40 # WARNING = 30 # WARN = WARNING # INFO = 20 # DEBUG = 10 # NOTSET = 0 # logging.critical("我是critical") # 50分. 最貴的 # logging.error("我是error") # 40分logging.warning("我是警告") # 警告 30 # logging.info("我是基本信息") # 20 # logging.debug("我是調試") # 10 # logging.log(2, "我是?定義") # ?定義. 看著給分try:ret=10/0 except ZeroDivisionError as e:print("正在寫入日記")logging.error(traceback.format_exc())print("寫入完畢")3、實例:產生10個錯誤,記錄下來
?
import logging import tracebacklogging.basicConfig(filename='x1.txt', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=20) # 當前配置表示 20以上的分數會被寫??件 class JackError(Exception):#自定義異常passfor i in range(10):try:if i%3==0:raise FileExistsError("文件不在押")elif i%3==1:raise KeyError("按錯了")else:raise JackError("Jack錯了")except FileExistsError as e:val=traceback.format_exc()logging.error(val)print("文件丟失")except KeyError as e:val=traceback.format_exc()logging.error(val)print("瞎jb按")except JackError as e:val=traceback.format_exc()logging.error(val)except Exception:val=traceback.format_exc()logging.error(val)print("其他錯誤")
log文件
2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 44, in <module>raise FileExistsError("文件不在押") FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 46, in <module>raise KeyError("按錯了") KeyError: '按錯了'2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 48, in <module>raise JackError("Jack錯了") JackError: Jack錯了2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 44, in <module>raise FileExistsError("文件不在押") FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 46, in <module>raise KeyError("按錯了") KeyError: '按錯了'2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 48, in <module>raise JackError("Jack錯了") JackError: Jack錯了2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 44, in <module>raise FileExistsError("文件不在押") FileExistsError: 文件不在押2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 46, in <module>raise KeyError("按錯了") KeyError: '按錯了'2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 48, in <module>raise JackError("Jack錯了") JackError: Jack錯了2018-11-12 18:43:50 - root - ERROR -日記: Traceback (most recent call last):File "E:/qishi/Day19 約束/日記.py", line 44, in <module>raise FileExistsError("文件不在押") FileExistsError: 文件不在押
?
?
?
?
轉載于:https://www.cnblogs.com/angle6-liu/p/9947251.html
總結
以上是生活随笔為你收集整理的python 约束与异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫爬取百度词条
- 下一篇: Tomcat启动时项目重复加载,导致资源