日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 约束与异常处理

發(fā)布時(shí)間:2024/7/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 约束与异常处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、類(lèi)的約束

  1、約束就是對(duì)類(lèi)的約束。其實(shí)就是父類(lèi)對(duì)子類(lèi)進(jìn)行約束,子類(lèi)必須要寫(xiě)xxx方法。

  2、抽象:就是當(dāng)我們沒(méi)法對(duì)一個(gè)功能或者一個(gè)屬性進(jìn)行精確的表述,一般都采用抽象的方式給出。

    (1)抽象類(lèi)的書(shū)寫(xiě)規(guī)范

from abc import ABCMeta,abstractmethod # 引入抽象方法的模塊class Base(metaclass=ABCMeta): #定義抽象類(lèi) maetaclass=ABCmeta@abstractmethod#抽象方法的關(guān)鍵字def 方法(self):pass

    (2)抽象類(lèi)相關(guān)的知識(shí)點(diǎn):

      a:一個(gè)類(lèi)包含抽象方法,一定屬于抽象類(lèi)

      b:抽象類(lèi),可以包含正常的方法(實(shí)例方法、類(lèi)方法、靜態(tài)方法)

      c:抽象類(lèi)不能創(chuàng)建對(duì)象

      d:如果子類(lèi)未對(duì)父類(lèi)的抽象方法進(jìn)行重寫(xiě),該類(lèi)也是一個(gè)抽象類(lèi),無(wú)法創(chuàng)建對(duì)象

      f:接口,類(lèi)中全都是抽象方法

from abc import ABCMeta,abstractmethod # 引入抽象方法的模塊class Base(metaclass=ABCMeta): #定義抽象類(lèi) maetaclass=ABCmeta@abstractmethod#抽象方法的關(guān)鍵字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() # 只要類(lèi)包含了抽象方法就不能創(chuàng)建對(duì)象

 

  2、python中約束有的兩種方式:(貼吧登陸)

    (1)使用抽象類(lèi)和抽象方法

from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta):@abstractmethod #定義一個(gè)抽象的login方法def login(self):pass class Normal(Base):def login(self):print("普通用戶(hù)登錄") class Memer(Base):def login(self):print("吧務(wù)登陸") class Admin(Base):def login(self):print("管理員登錄")

    (2)使用拋出異常,并且拋出的異常時(shí)NotImplementError。這樣比較專(zhuān)業(yè),并且錯(cuò)誤比較明確。

#如果子類(lèi)沒(méi)有重寫(xiě)父類(lèi)的方法,執(zhí)行了父類(lèi)的方法則拋出異常 class Base:def login(self):raise NotImplementedError("你沒(méi)有重寫(xiě)該方法,滾回去重寫(xiě)") class Normal(Base):def login(self):print("普通用戶(hù)登錄") # class Memer(Base): # def login(self): # print("吧務(wù)登陸") class Memer(Base):pass class Admin(Base):def login(self):print("管理員登錄") n=Normal() m=Memer() a=Admin() n.login() m.login()#NotImplementedError: 你沒(méi)有重寫(xiě)該方法,滾回去重寫(xiě) a.login()

?

二、異常處理

  1、格式: 

try:'''進(jìn)行操作''' except Exception as e:#Exception是異常的父類(lèi),可以捕獲所有的異常'''捕獲異常后,給予提示語(yǔ)''' else:'''try中沒(méi)有出現(xiàn)錯(cuò)誤,執(zhí)行這里的操作''' finally:'''不管出不出錯(cuò)都會(huì)執(zhí)行這里的操作'''

  解讀:程序先執(zhí)行try中的操作,如果出錯(cuò)了,就會(huì)走到except里面,進(jìn)行相應(yīng)的操作,如果沒(méi)有出錯(cuò),就直接執(zhí)行else里面的操作,不管出不出錯(cuò)都會(huì)執(zhí)行最后的finally.

  2、拋出異常

    (1)關(guān)鍵字 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("請(qǐng)給我int或者float")#拋出異常,異常Exception ret=cul(3,"麻辣燙")#Exception: 請(qǐng)給我int或者float

    (2)自定義異常??

      實(shí)現(xiàn):定義一個(gè)異常繼承Exception就可以實(shí)現(xiàn)自定義異常了(Exception是異常的基類(lèi),)    

class GenderException(Exception):#定義了一個(gè)性別異常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("性別錯(cuò)了") #拋出自定義異常

  3、異常處理

    (1)處理除數(shù)不能是0的異常

# ZeroDivisionError try: #把需要處理的對(duì)象放入其中print(10/0) except ZeroDivisionError as e:print("0不能做除數(shù)") # 異常處理結(jié)果顯示:0不能做除數(shù)

     (2)獲取錯(cuò)誤信息 :traceback (目的主要是方便程序員排查錯(cuò)誤) 

import traceback #插入堆棧模塊 # traceback這個(gè)模塊可以獲取到我們每個(gè)?法的調(diào)用信息 try: #把需要處理的對(duì)象放入其中print(10/0) except ZeroDivisionError as e:val=traceback.format_exc()#獲取堆棧信息print("0不能做除數(shù)")print()print(val) # 異常處理結(jié)果顯示:0不能做除數(shù) 結(jié)果: 0不能做除數(shù)Traceback (most recent call last):File "E:/qishi/Day19 約束/04異常處理.py", line 79, in <module>print(10/0) ZeroDivisionError: division by zero

?

?三、日記處理

  1、基本步驟

    1. 導(dǎo)入logging模塊.
    2. 簡(jiǎn)單配置?下logging
    3. 出現(xiàn)異常的時(shí)候(except). 向?志?寫(xiě)錯(cuò)誤信息

  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) # 當(dāng)前配置表示 10以上的分?jǐn)?shù)會(huì)被寫(xiě)??件 # # 日記 # 1、導(dǎo)入logging模塊 # 2、簡(jiǎn)單配置;一下logging # 3、出現(xiàn)異常的時(shí)候,向日記里面寫(xiě)錯(cuò)誤信息 import logging import traceback # filename: ?件名 # format: 數(shù)據(jù)的格式化輸出. 最終在?志?件中的樣? # 時(shí)間-名稱(chēng)-級(jí)別-模塊: 錯(cuò)誤信息 # datefmt: 時(shí)間的格式 # level: 錯(cuò)誤的級(jí)別權(quán)重, 當(dāng)錯(cuò)誤的級(jí)別權(quán)重?于等于leval的時(shí)候才會(huì)寫(xiě)??件 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) # 當(dāng)前配置表示 10以上的分?jǐn)?shù)會(huì)被寫(xiě)??件 # 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("我是調(diào)試") # 10 # logging.log(2, "我是?定義") # ?定義. 看著給分try:ret=10/0 except ZeroDivisionError as e:print("正在寫(xiě)入日記")logging.error(traceback.format_exc())print("寫(xiě)入完畢")

  3、實(shí)例:產(chǎn)生10個(gè)錯(cuò)誤,記錄下來(lái)

?

import logging import traceback
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) # 當(dāng)前配置表示 20以上的分?jǐn)?shù)會(huì)被寫(xiě)??件 class JackError(Exception):#自定義異常passfor i in range(10):try:if i%3==0:raise FileExistsError("文件不在押")elif i%3==1:raise KeyError("按錯(cuò)了")else:raise JackError("Jack錯(cuò)了")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("其他錯(cuò)誤") 

      

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("按錯(cuò)了") KeyError: '按錯(cuò)了'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錯(cuò)了") JackError: Jack錯(cuò)了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("按錯(cuò)了") KeyError: '按錯(cuò)了'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錯(cuò)了") JackError: Jack錯(cuò)了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("按錯(cuò)了") KeyError: '按錯(cuò)了'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錯(cuò)了") JackError: Jack錯(cuò)了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: 文件不在押

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/angle6-liu/p/9947251.html

總結(jié)

以上是生活随笔為你收集整理的python 约束与异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。