程序运行过程中产生的错误, 不正常
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不能是除数")
  finally:
    最后执行这个,文件造作
.....
ret = chufa(10, 0)
print(ret)

  

自定义异常:

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)

  

约束:

class Base:
def login(self):
raise NotImplementedError("没有实现login方法") # 专业的写法 闹特A噗安门特
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)
重写:子类对父类提供的方法不满意。 重新去定义这个方法

  


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加密:   MD5加密不可逆

update   啊破DA特
hashlib
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("登录失败")

  

日志处理:

进入这个模块:

import logging
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, "我是自定义")

  

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

  

如何用他

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)

  

多文件

# 多文件日志处理
# 创建⼀个操作⽇志的对象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系统')

  

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

  1. 小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理)

    小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理) 异常处理(处理) 1.产生异常.raise 异常类(),抛出异常2. 处理异常: try: xxxxx # 尝试执行的代码. ...

  2. python--类的约束,异常处理,MD5加密,日志处理logging模块

    1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...

  3. day25 Pyhton学习 MD5加密.日志

    一.MD5加密 MD5是一种不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我们不需要手写这一套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作 import ha ...

  4. python 约束,异常处理与MD5加密

    1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError (重点) 2. 抽象类和抽象方法 # 语法 # from abc import ABCMet ...

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

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

  6. Python面向对象(约束,异常处理,md5加密)(五)

    1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplemen ...

  7. python -- 约束、异常处理、MD5

    1.类的约束       1.写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束,必须重写该方法 def login(se ...

  8. JMeter-Eclipse添加自定义函数 MD5加密 32位和16位

    最近公司的接口都是MD5  16位加密,所以要使用加密功能. 之前也做过加密,因为用的比较少,所以是写了一个加密方法,导出JAR包,调用的.用起来需要很多设置,并且换算效率也不高.听前同事说,jmet ...

  9. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

随机推荐

  1. crud树型结构数据

    小型数据,比如标签,部门之类的,可以组织数据,成层状结构,一并返回前端,节省请求次数:但是大型数据,比如省市区等等联动,如果一并返回组织好的数据,查询量大,页面多次刷新,恶意请求,放入缓存还可以,其实 ...

  2. Roslyn研究随笔

    Roslyn概述: http://blogs.ejb.cc/archives/7604/dotnet-compile-platform-roslyn-overview 使用Microsoft Rosl ...

  3. mysql数据库的安装和基本使用

    一.数据库安装配置 1)数据库的概念 .数据库相关概念 数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端) 数据库管理管理系统RDBMS(本质就是一个C/S架构的套接字软件 ...

  4. tms web core 里面调用pascal 过程。

    procedure show(s:string);begin  showmessage(s);end; procedure TForm3.WebButton1Click(Sender: TObject ...

  5. 为什么行内元素不能设置margin-top/margin-bottom/padding-top/padding-bottom?

    HTML 里的元素分为替换元素(replaced element)和非替换元素(non-replaced element).- 替换元素是指用作为其他内容占位符的一个元素.最典型的就是img,它只是指 ...

  6. hadoop flume 架构及监控的部署

    1 Flume架构解释  Flume概念 Flume是一个分布式 ,可靠的,和高可用的,海量的日志聚合系统 支持在系统中定制各类的数据发送方 用于收集数据 提供简单的数据提取能力 并写入到各种接受方 ...

  7. ==和equals的比较

    一 : == 的特点: a == b ; 1.如果A和B是基本数据类型    ==   比较的是两个变量的值 2.如果A和B是引用数据类型    == 比较的是两个变量的内存地址 二:重写的equal ...

  8. 使用MyGeneration创建模板:介绍(翻译)

    原文信息 原文地址 原文作者信息: Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com April 2 ...

  9. leetcode - [5]Insertion Sort List

    Sort a linked list using insertion sort. 思路:插入排序 #include <iostream> using namespace std; stru ...

  10. java注解学习(1)注解的作用和三个常用java内置注解

    今天,记录一下自己学习的关于注解方面的知识. Annotation是从JDK5.0开始引入的新技术 Annotation的作用: -不是程序本身,可以对程序做出解释(这一点和注释没什么区别) -可以被 ...