一.约束

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. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  2. 5. Longest Palindromic Substring (DP)

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  3. HDU 3691 Nubulsa Expo(全局最小割)

    Problem DescriptionYou may not hear about Nubulsa, an island country on the Pacific Ocean. Nubulsa i ...

  4. FortiGate设备管理

    1.Web管理 1.FortiGate出厂配置 默认地址为192.168.1.99,可以通过https的方式进行web管理(默认用户名admin,密码为空).不同型号设备用于管理的接口略有不同,如: ...

  5. JSP跳转到指定位置

    通常情况下用如下写法即可 onclick='window.location.hash = "某元素的id";' 但我的元素是动态生成的,直接生成代码附带多个单引号和双引号,js语言 ...

  6. java 基础之--nio 网络编程

    在传统的Java 网络编程中,对于客户端的每次连接,对于服务器来说,都要创建一个新的线程与客户端进行通讯,这种频繁的线程的创建,对于服务器来说,是一种巨大的损耗,在Java 1.4 引入Java ni ...

  7. Couchbase学习和使用

    Couchbase介绍 couchbase的关键有两点:延后写入和松散存储.延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这 ...

  8. 【APT】SqlServer游标使用

    use [ElephantCredit] go begin transaction tran_bank; print '**脚本开始执行!'; declare @tran_error int , @n ...

  9. tkinter模块

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

  10. C# CashCode项目开发

    如果不是因为这个项目,我可以一辈子都接触不到识币器,更不会知道CashCode是干啥的. 从项目开始,到CashCode机器到桌面上测试,中间在网上找过资料,也联系过北京的技术,他们发来的PDF让我看 ...