今日主要内容
1. 约束(1. 抛出异常, 2. 写抽象类)(难点, 重点)
1. 抛出异常; NotImplementedError
2. 抽象类
from abc import ABCMeta, abstractmethod
class Base(metaclass = ABCMeta): 抽象类
@abstractmethod
def 方法(self):pass
class Foo(Base): 子类必须重写父类中的抽象方法
def 方法(self):
pass
一个类包含类抽象方法. 这个类一定是抽象类
抽象类中可以有正常的方法
抽象类中如果有抽象方法. 这个类将不能创建对象
接口: 类中都是抽象方法
2. 异常处理
try:
except Error as e:
except....
else:
finally:
收尾
import traceback
try:
# 尝试执行的代码
except Exception as e:
# 除了错之后要做什么
traceback.format_exc() # 获取堆栈信息(错误信息)
ry:
xxxx
except 错误名称 as 别名:
出现错误的时候. 要干什么...
except 错误名称 as 别名:
出现错误的是偶. 要干什么
....
except Exception as e: # 所有错误的根
出现的所有的错误. 我都可以这样处理
else: # 很少用到
不出错的时候执行这里的代码
finally:
结束. 收尾工作
'''
# try:
# print(1/0) # 0不能做除数 ZeroDivisionError: division by zero
# except ZeroDivisionError as z:
# print("错了. 除数不能为0")
# 由python解释器来调用代码. 出现了错误. 系统会自动的产生一个叫异常的对象.
# 系统会尝试着把错误返回给调用方. 过程被称为:抛异常
# 我们通过try...except 可以吧系统产生的这个错误获取到. 过程叫捕获异常
# import traceback
# # 计算a+b
# def cul(a, b):
# if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
# return a + b
# else:
# # 在这里有两种方案. 1. 直接返回 , 2. 抛出异常
# # raise 抛出 Exception 错误和异常,所有错误的根
# raise Exception("我要的不是这个. 你应该我传递int或者float")
#
#
# try:
# print(cul(1, "胡辣汤")) # 加上异常的处理
# except Exception as e:
# # 获取到错误信息. 我们需要访问堆栈信息
# print(traceback.format_exc()) # 获取堆栈信息
# print("出现了错误")
# 我们出现的错误. python中没有给出具体的记录, 慎用. 名字一定要符合规范
# JackException
# 自定义异常
# class GenderException(Exception):
# pass
#
# class Person:
# def __init__(self, name, gender):
# self.name = name
# self.gender = gender
#
# # 洗澡 -> 男的进男浴室
# def goto_nan_yushi(self):
# if self.gender != "男":
# raise GenderException("性别不对") # 除了名字以外都是父类中的Exception
# else:
# print("欢迎光临.")
# try:
# p2 = Person("wusir", "女")
# p2.goto_nan_yushi()
# p1 = Person("alex", "男")
# p1.goto_nan_yushi()
# except GenderException as e:
# print("你去男澡堂子干嘛?")
# except Exception as e:
# print("其他错误")
3. 日志处理
logging
critical
error(最多)
wraning
info
debug