Python 18 约束和异常处理

约束和异常

1.类的约束

  1. 提取父类. 然后在子类中定义好方法. 在这个方法中什么都不用干. 就抛一个异

    常就可以了. 这样所有的子类都必须重写这个方法. 否则. 访问的时候就会报错

  2. 使用元类来描述父类. 在元类中给出一个抽象?法. 这样子类就不得不给出抽象

    方法的具体实现. 也可以起到约束的效果.

方法一 ↓↓↓

def login(self):
 raise Exception("你没有实现login?法()")
class Normal(Base):
 def login(self):
 	pass
class Member(Base):
 	def denglu(self):
 		pass
class Admin(Base):
 def login(self):
 	pass
 # 项目经理写的总入口
def login(obj):
 print("准备启动程序.......")
    obj.login()
 print("进入主程序.......")
n = Normal()
m = Member()
a = Admin()
login(n)
login(m) # 报错.
login(a)

方法二 ↓↓↓

写抽象类和抽象方法.

需要引入abc模块中的 ABCMeta 和 abstractmethod

from abc import ABCMeta, abstractmethod
class Base(metaclass=ABCMeta):
  @abstractmethod
  def login(self):
  pass
class Normal(Base):
  def loin(self):
  pass
class Member(Base):
 def denglu(self): # 这个就没用了
 pass
 def login(self): # 子类对父类进行实现
 pass
class Admin(Base):
 def login(self):
 pass
def login(obj):
 print("准备进入程序.......")
 obj.login()
 print("进入主程序.......")
n = Normal()
m = Member()
a = Admin()
login(n)
login(m)
login(a)

1). 使用抽象类和抽象方法, 由于该方案来源是java和c#. 所以使用频率还是很少的

2). 使用人为抛出异常的方案. 并且尽量抛出的是NotImplementError. 这样比较专

业, 而且错误比较明确.(推荐)

2.异常处理

def num():
    return a/b
rt = num(2,0)
print(rt)    #  直接报错

上面就直接报错了,除数不能是0

def num():
    return a/b
try:
    rt = num(2,0)
    print(rt)
except Exception as e:
    print("除数不能是0")

直接将报错结果变成 除数不能是0

用 try 和 except拦截异常,并将异常对象抛给e

3.自定义异常

只要你的类继承了Exception类. 那你的类就是一个异常类.

class GenderError(Exception):
    pass
class Person:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
def nan_zao_tang_xi_zao(person):
    if person.gender != "男":
        raise GenderError("性别不对. 这里是男澡堂子")
p1 = Person("alex", "男")
p2 = Person("eggon", "蛋")
# nan_zao_tang_xi_zao(p1)
# nan_zao_tang_xi_zao(p2) # 报错. 会抛出一个异常: GenderError
# 处理异常
try:
    nan_zao_tang_xi_zao(p1)
    nan_zao_tang_xi_zao(p2)
except GenderError as e:
    print(e) # 性别不对, 这?是男澡堂?
except Exception as e:
    print("反正报错了")

4.MD5加密

MD5是一种不可逆的加密算法. 它是可靠的. 并且安全的. 在python中我们不需要手写

这套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作

import hashlib
obj = hashlib.md5()
obj.update("alex".encode("utf-8")) # 加密的必须是字节
miwen = obj.hexdigest()
print(miwen) # 534b44a19bf18d20b71ecc4eb77c572f

可是上面这样的加密是不安全的, 很容易会产生撞库

看下面

import hashlib
obj = hashlib.md5(b"fjlksajflkjasfsalwer123dfskjf") # 加入这些就安全了
obj.update("alex".encode("utf-8")) # 加密的必须是字节
miwen = obj.hexdigest()
print(miwen) # 99fca4b872fa901aac30c3e952ca786d

加密的应用

import hashlib
def my_md5(s):
    obj = hashlib.md5(b"fjlksajflkjasfsalwer123dfskjf")
    obj.update(s.encode("utf-8")) # 加密的必须是字节
    miwen = obj.hexdigest()
    return miwen
username = input("请输入用户名:")
password = input("请输入密码:")
if username == "wusir" and my_md5(password) =="99fca4b872fa901aac30c3e952ca786d":
    print("成功")
else:
    print("失败")

5.日志

  1. 导入logging模块.
  2. 简单配置一下logging
  3. 出现异常的时候(except). 向日志里写错误信息.
logging.basicConfig(filename=‘x1.txt‘,
 format=‘%(asctime)s - %(name)s - %(levelname)s -%
(module)s: %(message)s‘,
 datefmt=‘%Y-%m-%d %H:%M:%S‘,
level=0) # 当前配置表示 10以上的分数会被写入文件
logging.critical("我是critical") # 50分. 最贵的
logging.error("我是error") # 40分
logging.warning("我是警告") # 警告 30
logging.info("我是基本信息") # 20
logging.debug("我是调试") # 10
logging.log(2, "我是自定义") # 自定义. 看着给分

CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

原文地址:https://www.cnblogs.com/NATO/p/9983792.html

时间: 2024-10-07 06:55:33

Python 18 约束和异常处理的相关文章

类的约束 和 异常处理

本节主要内容: 1.类的约束 2.异常处理 3.自定义异常 4.MD5 加密 5.日志 一 类的约束 首先,你要清楚,约束是对类的越是,比如,你是一个项目经理,然后呢,你给手下的人分活,张三,你处理一下普通用户登录,李四,你处理一下会员登录,王五,你处理一下管理员登录,那这个时候呢,他们就开始分别去写他们的功能了,但是呢,你要知道,程序员不一定会有那么好的默契,很有可能三个程序员会写三个完全不同的方法,比如这样: 1 class Normal: # 张三,普通会员登录 2 def login(s

Python开发基础-Day23try异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

python基础之try异常处理、socket套接字基础part1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

约束和异常处理

本节主要内容: 1. 类的约束 2. 异常处理理 3. 自定义异常 4. MD5加密 5. 日志 一.类的约束 首先,要清楚.约束是对类的约束.每个人和每个人写代码用的方法名和类名都不一样假如你处理一个用户登录,有三个不同级别的登陆要求分别分给三个人写你要知道程序员不一定有那么好的默契.很有可能三个人会写不同的方法,比如就像是这样: class Normal: # 张三, 普通?登录 def login(self): pass class Member: # 李四, 会员登录 def dengl

python 学习笔记 6 -- 异常处理

当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了. 那么如果你是在IDE中运行,一个错误发生,异常会被打引出来,这便是未处理异常:当异常发生时,如果没有代码去关注和处理它,这些异常会传给置在Python中的缺省处理,他会输出一些调试信息并且终止运行.如果是在IDE中,这不是什么大事,但是如果是Python程序运行中的异常,它会导致整个程序终止,对于这些情况可以使用异常来处理. 1.try..exce

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句

玩转python爬虫之URLError异常处理

这篇文章主要介绍了python爬虫的URLError异常处理,详细探寻一下URL\HTTP异常处理的相关内容,通过一些具体的实例来分析一下,非常的简单,但是却很实用,感兴趣的小伙伴们可以参考一下 本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常.下面是一个例子,先感受

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

1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplementedError("没有实现登录") class Person(Base): def login(self): print("正常使用") class SpecialPerson(Base): def denglu(self): print("非正常"

python之约束、加密及logging模块

一.什么是约束? 在生活中的约束大概就是有什么原因,导致你不能做这件事情了,称之为约束.而在python中的约束是在当多个类中,都需要使用某些方法时,需要人为抛出异常或使用基类+异常处理来进行约束 1 class BaseMessage: 2 def send(self): 3 raise NotImplementedError("send必须被重写") 4 # 约束潜规则, 子类必须有send方法 否则主动抛异常 5 class Msg(BaseMessage): 6 def sen