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 下执行"

 

posted @   三三得九86  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示