python--类的约束, 异常处理, MD5, 日志处理
一 . 类的约束
1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError

class Base:
# 对子类进行了约束. 必须重写该方法
# 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他
def login(self):
# 没有被实现错误
raise NotImplementedError("你要重写一下login这个方法. 否则报错!") # 抛异常 .
class Member(Base):
def login(self):
print("我是普通人登录")
class BaWu(Base):
def login(self):
print("吧务登录")
class Houtai(Base):
def denglu(self): # 报错, 上层程序员写代码没有按照规范来 需要改成login
print("后台登录")
# 整合这些个功能
def deng(obj):
obj.login() m = Member()
bw = BaWu()
ht = Houtai() deng(m)
deng(bw)
deng(ht)

2. 抽象类和抽象方法
# 抽象方法不需要给出具体的方法体. 抽象方法内只写一个pass就可以了
# 在一个类中如果有一个方法是抽象方法. 那么这个类一定是一个抽象类
# 抽象类中. 如果有抽象方法. 此时这个类不能创建对象
# 如果一个类中所有的方法都是抽象方法. 这个类可以被称为接口类

# 写一个抽象方法:导入一个模块
from abc import ABCMeta, abstractmethod
# 此时抽象类不能创建对象
class Animal(metaclass=ABCMeta): # 写完这东西. 就是个抽象类
@abstractmethod # 抽象方法
def chi(self): pass # 吃应该只是一个抽象概念. 没办法完美的描述出来吃什么东西
# 抽象类中可以有正常的方法
def dong(self):
print("动物会动")
# class Cat(Animal): # 此时猫里面也有一个抽象方法, 此时的猫是创建不了对象的
# pass
class Cat(Animal):
def chi(self): # 重写父类中的抽象方法
print("猫喜欢吃鱼")
a = Cat()
a.chi()
a.dong()

二 . 异常处理
1. 异常处理. try except raise
try:
代码
except 异常类:
除了错, 如何处理异常
except 异常类:
除了错, 如何处理异常
except 异常类:
除了错, 如何处理异常
else:
当程序不出错
finally:
不管出不出错, 都要执行

try:
print(1/10)
# f = open("哈哈哈哈哈", mode="r")
# d = {[]:123}
except ZeroDivisionError: # 可以处理所有错误
print("除以0出错了")
except FileNotFoundError:
print("文件不存在的错误")
except Exception: # 兜底的
print("其他错误")
else: # 当try中的代码不产生任何错误的时候. 会自动的执行else里的代码
pass
finally: # 最终. 不管出错还是不出错. 都要执行最后的finally 一般用来收尾
print("哈哈哈哈哈哈哈哈啊哈")

2. raise 异常类("信息") 如何自己定义异常
class 类(Exception):
pass

# 如何自己定义异常
# 随便写一个类. 这个类只要继承了Exception 这个类就是一个异常类就可以作为raise对象
class CulException(Exception):
pass # 如何手动抛出异常
def cul(a, b):
# 只能是数字相加
if (type(a) == int or type(a) == float ) and (type(b) == int or type(b) == float):
return a + b
else:
# 抛出异常
# raise 异常类(错误信息)
raise CulException("我没办法给你处理这样的运算") print(cul("就不放, 气死你",2))

3. 堆栈

import traceback # 用来查看堆栈信息
class GenderException(Exception):
pass
class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def xizao(self):
print(f"{self.name}在洗澡")
def nan_zao_tang_zi(ren):
if ren.gender == "男":
ren.xizao()
else:
raise GenderException("性别不对. 去对门看看") # 抛异常是很重要的
try:
p1 = Person("张三", "不知道")
p2 = Person("李四", "男")
nan_zao_tang_zi(p1)
nan_zao_tang_zi(p2)
except GenderException:
# ret = traceback.format_exc() # 查看堆栈信息, 看错误的
# print(ret)
print("出错了. 很可惜")

三 . MD5

import hashlib def my_md5(s):
obj = hashlib.md5(b"ghjhgfl") # 加盐 里面的字母随便给
obj.update(s.encode("utf-8")) # 把要加密的内容给md5
return obj.hexdigest() print(my_md5("我是吴彦祖")) # afd1938a01d0c5894d0781fb335249a3

四 . 日志处理
等级:
critical: 50
error:40
warning:30
info:20
debug:10

import logging
#
# 配置好日志的处理, 默认就是GBK
logging.basicConfig(filename='x1.txt', # 把日志信息写入的文件名
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S', # 时间的格式
level=40) # 当前配置表示 10以上的分数会被写入日件 # 向日志文件写入内容
logging.critical("我是赌神,我是赌神") # 50, 几乎是最高的
logging.error("我是周润发") # 40 平时使用最多的就是他
logging.warn("气死我了") # 30 警告
logging.warning("还好吧")
logging.info("提示") # 20 级
logging.debug("开发的时候把这个开着") # 10
logging.log(999, "宝宝今天有懵逼了") # level = 999


import logging # 创建一个操作日志的对象logger(依赖FileHandler)
file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') # 创建文件
file_handler.setFormatter(logging.Formatter(
fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) # 设置日志文件的格式
logger1 = logging.Logger('腾讯qq', level=10) # 创建一个日志文件处理对象
logger1.addHandler(file_handler) # 把文件添加到日志 logger1.error("麻花藤明天请大家吃饭. 去不去?") # 再创建一个操作日志的对象logger(依赖FileHandler)
file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')
file_handler2.setFormatter(logging.Formatter(
fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s"))
logger2 = logging.Logger('百度贴吧', level=logging.DEBUG)
logger2.addHandler(file_handler2)
logger2.error("我才不去呢. 我们在北京. 离你那么远")

python--类的约束, 异常处理, MD5, 日志处理的更多相关文章
- python之路--类的约束, 异常处理, MD5, 日志处理
一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...
- python 面向对象(五)约束 异常处理 MD5 日志处理
###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...
- 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理
一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...
- python --- 20 约束 异常处理 MD5 日志
一.类的约束 1.抛出异常 NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继 ...
- 20 约束 异常处理 MD5 日志
三十九, 一.类的约束 1.抛出异常 NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完 ...
- python 约束. 异常处理. MD5. 日志处理
一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...
- python--类的约束,异常处理,MD5加密,日志处理logging模块
1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...
- Python面向对象(约束,异常处理,md5加密)(五)
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplemen ...
- python之约束, 异常处理, md5
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...
随机推荐
- android BottomNavigationView 底部显示3个以上的item
你现在可以用app:labelVisibilityMode="[labeled, unlabeled, selected, auto] labeled 所有的标签都是可见的. unlabel ...
- [題解] luogu p1220 關路燈
區間dp 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. ...
- 排错:expected unqualified-id before string constant
一个低级但是不好定位的编译错误,常见的问题是: 1. 语句的 { 括号不匹配. 2. 缺少 : , 特别是类的定义或声明,枚举的定义. 3. 变量名或函数名使用了保留字.
- Longest Palindromic Substring笔记
这是一道在leetcode上看到的题目 一开始,我能想到的思路是蛮力法: 就遍历每个字符,然后对每个字符都尝试从1到n的长度,看有没有回文串,并记录以该字符起始的回文串的最大长度.这个思路其实没有上手 ...
- python_19(Django外键)
第1章 Django ORM相关操作 1.1 在一个py文件中使用django项目 1.2 返回QuerySet对象的方法有 1.2.1 特殊的QuerySet 1.3 返回具体对象的 1.4 返回布 ...
- hdu4578Transformation(线段树多个lz标记)
这里以3次方来举例讲一下这题的做法,其它维类似. 如果要求某一个值的3次方那么sum = t^3,设t = x+y.那也就是sum = (x+y)^3. 假如我让每个数都加z t = x+y+z,我可 ...
- js 学习网站
1. Mozilla Developer Network(MDN) 这里你可以找到官方的完整的javascript参考,还有许多有用的指导,教程以及文章,从基本javascript使用到最佳实践以及 ...
- Oracle/MySql/SQL Sqlserver分页查询
简述 简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句. Oracle分页查询 例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据. 查询语句: s ...
- Promise/A+规范
1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...
- babel-loader7和babel8版本的问题
根据官网https://www.npmjs.com/package/babel-loader要对应版本 一.babel7.X版本 1.要安装的包 第1套包:npm i babel-core babe ...