06_06、反射、异常、断言
一、反射
1. getattr()
2. setattr()
3. hasattr()
4. delattr()
class Student(): school = 'SH' def func(self): print('from func') stu = Student() # print(stu."school") # 此处证明不可用对象.属性名的字符串找到‘SH’ # 但是反射提供了这种可能 # 1.getattr print(getattr(stu, 'school', 123)) # 有就查找,没有就用第三个参数代替 print(getattr(stu, 'func')) # 通过字符串也可以调用方法,结果是地址 getattr(stu, 'func')() # 加括号是运行方法 # 2. setattr() setattr(stu, 'x', 100) # 增加 print(stu.__dict__) # 3. hasattr # 查找是否存在,返回值为布尔类型 print(hasattr(stu, 'school')) # 4. delattr stu.x = 1 # 修改 delattr(Student, 'school') # 删除 print(Student.__dict__) # 此时Student类字典里就没有了school属性
二、异常
1. 什么是异常?
异常就是错误发生的信号,如果不对该信号做处理,程序就会终止运行
2. 为什么要用异常?
为了增加代码的健壮性
3、异常使用的完整语法
try: pass except 异常的类型1: pass except 异常的类型2: pass except Exception: # 万能异常 pass else: print('当没有发生异常的时候执行') finally: print('不管有没有异常都会执行')
注意:try不能直接跟else,否则报错
4、raise Exception('reason')主动抛出异常
class Animal(): def speak(self): print('我输出了') raise Exception('必须实现speak方法') # 父类中输出并主动抛出异常 class Student(Animal): # 子类有spaek,则直接运行子类的方法,此时不会主动抛出异常 # def speak(self): # print('来自 学生') # 子类没有speak,则从父类中找speak def sing(self): pass stu = Student() stu.speak()
5、自定义异常
class MyException(BaseException): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg raise MyException('出问题啦')
三、断言
assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
1 2 | import sys<br> # 断定 系统是linux,否则异常提示: "该代码只能在 Linux 下执行" assert 'linux' in sys.platform, "该代码只能在 Linux 下执行" |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通