![]()
![]()
![]()
#异常
# 程序运行过程中产生的错误, 不正常
def chufa(a, b):
try: # 尝试执行xxx代码
ret = a/b # 如果这里出现了错误. 异常. 系统内部会产生一个异常对象. 系统会把这个错误抛出. 抛给调用方
return ret
except ZeroDivisionError as e: # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
print(e)
print("出错了. 0不能是除数")
except FileNotFoundError as e: # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
print(e)
print("出错了. 0不能是除数")
except StopIteration as e: # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
print(e)
print("出错了. 0不能是除数")
except Exception as e: # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
print(e)
print("出错了. 0不能是除数")
ret = chufa(10, 0)
print(ret)
# 计算两个整数的加法
def add(a, b):
if type(a)!=int or type(b) != int:
# return
raise TypeError("我这里只要int, 不要别的类型")
return a + b
add(123, "abc")
import traceback
class GenderError(Exception):
pass
class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def nan_gu_ke_xi_zao(per):
if per.gender != "男":
raise GenderError("这里是刘伟的男澡堂子. ")
else:
pass
p1 = Person("alex", "不详")
# nan_gu_ke_xi_zao(p1)
p2 = Person("wusir", "不详")
try:
nan_gu_ke_xi_zao(p2)
except GenderError as g:
print(g)
val = traceback.format_exc() # 获取错误堆栈
print(val)
#约束
#1.抛异常约束
class Base:
def login(self):
raise NotImplementedError("没有实现login方法") # 专业的写法
def kantie(self):
raise NotImplementedError("没有实现看帖功能")
# 张三
class Normal(Base):
def login(self):
print("普通人登陆")
# 李四
class Member(Base):
def denglu(self):
print("吧务登陆")
# 王五
class Admin(Base):
def login(self):
print("管理员登陆")
def login(obj):
print("产生验证码")
obj.login() # 标准在这里. 必须由login
print("进入主页")
# 场景
n = Normal()
m = Member()
a = Admin()
login(n)
login(m)
login(a)
# 重写:子类对父类提供的方法不满意。 重新去定义这个方法
#2.抽象类和抽象方法约束
from abc import ABCMeta, abstractmethod
class Animal(metaclass=ABCMeta): # 在父类中写出metaclass= xxx 抽象类, 类中存在抽象方法, 类一定是抽象类
@abstractmethod # 抽象方法
def chi(self): # 抽象的概念.
pass
def haha(self):
print("娃哈哈")
class Cat(Animal): # 子类必须实现父类中的抽象方法.
def chi(self): # 具体的实现
print("猫爱吃鱼")
Cat()
from abc import ABCMeta,abstractmethod
class Base(metaclass=ABCMeta):
@abstractmethod
def login(self):pass
# 张三
class Normal(Base):
def login(self):
print("普通人登陆")
# 李四
class Member(Base):
def login(self):
print("吧务登陆")
# 王五
class Admin(Base):
def login(self):
print("管理员登陆")
def login(obj):
print("产生验证码")
obj.login() # 标准在这里. 必须由login
print("进入主页")
# 场景
n = Normal()
m = Member()
a = Admin()
login(n)
login(m)
login(a)
#md5加密
import hashlib
# 1. 创建一个MD5对象
obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj") # 加盐
# 2. 把要加密的内容给md5
obj.update("alex".encode("utf-8")) # 必须是字节
# 3. 获取密文
val = obj.hexdigest() # 534b44a19bf18d20b71ecc4eb77c572f aa7aa5ec13222b27f76a094207c5ac75
print(val)
def my_md5(val):
obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj")
obj.update(val.encode("utf-8"))
val = obj.hexdigest()
return val
# 注册的时候. 用md5进行加密. 存储的是加密后的密文
username = input("请输入用户名")
password = input("请输入密码")
# cun = my_md5(password)
# print(cun) # alex 26adff81aa6778d26999b95ddc0e50b2
if username == "alex" and my_md5(password) == "26adff81aa6778d26999b95ddc0e50b2":
print("登录成功")
else:
print("登录失败")
#日志处理
#1.单文件日志设置
import logging
logging.basicConfig(filename='app.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=40) # level 设置级别. 当你的信息的级别>=level的时候才会写入日志文件, 默认30
# CRITICAL = 50
# FATAL = CRITICAL
# ERROR = 40
# WARNING = 30
# WARN = WARNING
# INFO = 20
# DEBUG = 10
# NOTSET = 0
# 写日志
# logging.critical("我是critical")
# logging.error("我是error")
# logging.warning("我是警告")
# logging.info("我是基本信息")
# logging.debug("我是调试")
# logging.log(2, "我是自定义")
import traceback
for i in range(20):
try:
if i % 3 == 0:
raise FileNotFoundError("我是FileNotFountException")
elif i % 3 == 1:
raise StopIteration()
elif i % 3 == 2:
raise KeyError()
except FileNotFoundError as e:
val = traceback.format_exc()
logging.error(val)
except StopIteration as e:
val = traceback.format_exc()
logging.error(val)
except KeyError as e:
val = traceback.format_exc()
logging.error(val)
except Exception as e:
val = traceback.format_exc()
logging.error(val)
# 2.多文件日志处理
# 创建⼀个操作⽇志的对象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('A', level=40)
logger1.addHandler(file_handler)
# 记录日志
logger1.error('我是A系统')
# 再创建⼀个操作⽇志的对象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('B', level=40)
logger2.addHandler(file_handler2)
# 记录日志
logger2.error('我是B系统')