一.约束

1.用父类执行约束

  子类继承父类,用重写方法,对子类的方法进行约束.

class Foo:
def login(self): # 对子类进行约束,该方法需要重写
# 没有执行的错误
raise NotImplementedError ("login重写") # 抛出 NotImplementedError错误 class Member(Foo):
def login(self):
print("我是普通登陆") class BaWu(Foo):
def login(self):
print("我是吧务登陆") class HouTai(Foo):
def denglu(self):
print("我是后台登陆") def fn(obj):
obj.login() m = Member()
bw = BaWu()
ht = HouTai() fn(m)
fn(bw)
fn(ht)

2.定义抽象类进行约束

  抽象类中的抽象方法不能执行,报错约束

from abc import ABCMeta ,abstractmethod  #导入抽象类模块

class Foo(metaclass=ABCMeta):  # 定义一个抽象类 元类  

    @abstractmethod                 # 定义一个 抽象方法
def login(self):pass def back(self): # 抽象类中可以写正常方法
print("退出登陆") class Member(Foo):
def login(self):
print("我是普通登陆") class BaWu(Foo):
def login(self):
print("我是吧务登陆") class HouTai(Foo):
def denglu(self):
print("我是后台登陆") def fn(obj):
obj.login() m = Member()
bw = BaWu()
ht = HouTai() fn(m)
fn(bw)
fn(ht) m.back()

抽象类总结:

  1.子类必须重写父类的方法,否则子类也是抽象类

  2.抽象类不能创建对象

  3.有抽象方法的类,就是抽象类

  4.抽象类可以有方法

二.异常处理

1.处理异常错误

  格式     try...except...

try:                 # 处理异常 try ... except...
print(1/0)
except ZeroDivisionError:
  print("0不能做除数")
  print("hah")
try:
print(1/0)
except Exception: # 可以处理所有错误,一般在最下面兜底用
print("我能拦截下面吗")
except ZeroDivisionError:
print("0不能做除数")

  格式      try...except...except...else...finally

try:
# print(1/0)
f = open("dssadas",mode="r")
except ZeroDivisionError:
print("0不能做除数")
except FileNotFoundError:
print("找不到文件")
except Exception: # 可以处理所有错误,一般在最下面兜底用
print("我能兜底")
else: # 当try中的代码不产生任何错误的时候,会自动执行else里的代码
print("没有出错?") # 这里一般放pass
finally: # 最终,不管出错还是不出错,都要执行最后的finally
print("哈哈哈")

2.自定义异常

  因为所有的异常类都继承Exception 所以写一个继承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 异常类(错误信息)
raise CulException("这是自己定义的异常类,抛出") print(cul("sdf",25))

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 man_zaotang(t):
if t.gender == "男":
t.xizao()
else:
raise GenderException("进错了") # 抛出异常很重要 try:
p = Person("小明","女")
man_zaotang(p)
except GenderException:
ret = traceback.format_exc() # 查看堆栈信息,看错误信息的
print(ret)  

三.MD5加密

  导入模块使用,不可逆的一种加密方式

import hashlib
def my_md5(s):
obj = hashlib.md5(b"dasds") # 加盐 防止被破解
obj.update(s.encode("utf-8")) # 给s字符串加密
return obj.hexdigest() # 获取密文 uname = input("用户名:")
upwd = input("密码:") if uname == "admin" and my_md5(upwd) == "f5cb18dbc8aae8b87c9129ff3156e0d5":
print("登陆成功") else:
print("帐号或者密码错误")

四.日志处理

  日志一般不需要更改很多,只需要设置参数,有模板

1.单一日志模板

import logging
# 单一项目模块
logging.basicConfig(
filename="1.log", # 把日志信息写入的文件名
# 时间 等级名 模块名 写入信息
format="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S", #
level=40 # 设置等级 超过这个的都写入日志
)
# 向日志文件写入内容
logging.critical("我几乎是最高等级50")
logging.error("我是错误,等级40")
logging.warning("我是警告,等级30")
logging.info("我是提示,等级20")
logging.debug("我是debug,等级10")
logging.log(600,"写入内容")

2.多个日志模板

import logging

file_handler = logging.FileHandler("2.log","a","utf-8")  # 创建日志文件
file_handler.setFormatter(
logging.Formatter(
# 日志格式
fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) logger1 = logging.Logger("dnf",level=10) # 设置日志处理对象和等级
logger1.addHandler(file_handler) # 把文件添加到日志 logger1.error("看看错误") # 错误信息 file_handler2 = logging.FileHandler("3.log","a","utf-8")
file_handler2.setFormatter(
logging.Formatter(
fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"
)
) logger2 = logging.Logger("lol",level=logging.DEBUG)
logger2.addHandler(file_handler2) logger2.critical("????") # 哪里需要记录日志就放到哪里,要设置等级

python约束 异常 MD5 日志处理的更多相关文章

  1. python 约束. 异常处理. MD5. 日志处理

    一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...

  2. 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理

    一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...

  3. python 面向对象(五)约束 异常处理 MD5 日志处理

    ###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 a ...

  4. python之路--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...

  5. python --- 20 约束 异常处理 MD5 日志

    一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继 ...

  6. Python 约束 , 自定义异常 , 加密 , 日志

    约束 约束 , 约束其派生类:  保证派生类中必须编写send方法 , 不然执行可能就会报错 Python中  语法: class BaseMessage(object): def send(self ...

  7. 20 约束 异常处理 MD5 日志

    三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完 ...

  8. python约束 与MD5加密写法

    python 中约束写法有两种 1 常用的通过继承关系主动抛出异常  2 通过抽象类+抽象方法 1 常用的通过继承关系主动抛出异常写法 在本send方法中报错不会抛出异常, class BaseMes ...

  9. python--类的约束, 异常处理, MD5, 日志处理

    一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代 ...

随机推荐

  1. hdoj1013(数根,大数,九余数算法)

    Digital Roots Problem Description The digital root of a positive integer is found by summing the dig ...

  2. WebForm从客户端中检测到有潜在危险的Request.Form 值的处理办法

    从客户端中检测到有潜在危险的 Request.Form 值由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报错上面的错误. 如:在网页的Te ...

  3. rdlc报表的导出及预览时表头

    感谢各路大神的博客,总结rdlc报表中目前用到的知识,积累. 一.rdlc报表PDF打印出现空白页 1.先至Report.rdlc報表設計的頁面,選擇功能表上的[報表]->[報表屬性],在[配置 ...

  4. POJ 1684 Corn Fields(状压dp)

    描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...

  5. Java04-Java语法基础(三)流程控制

    Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...

  6. linux查看本服务端口开放情况

    在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询. 1.netstat命令各个参数说明如下: -t : 指明显示T ...

  7. docker搭建lnmp(一)

    因为安装过程中涉及到一些修改配置文件的步骤,由于刚尝试不太会,所以这里都是通过安装好后,进入容器修改配置,最后退出重启容器. 目录结构 docker ├── mysql │   └── dockerf ...

  8. C#中泛型的解释(object,list,var,dynamic的区别)

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的 ...

  9. xml转化为Dictionary

    代码 public SortedDictionary<string, object> FromXml(string xml) { SortedDictionary<string, o ...

  10. MVC之CodeFirst

    1.建立MVC项目>NuGet安装EF 2.建立模型: public class Blog { [Key] [DatabaseGenerated(DatabaseGeneratedOption. ...