反射、异常处理
一、反射
反射:通过字符串的形式进行操作对象的属性方法
1、对象反射
1、getattr 获取指定的对象属性以及方法
变量名 = getattr(对象 , '对象属性' ,设置默认值)
# 默认值:当在对象中查找不到对应的属性是返回的内容 , 如果没有设置的话 , 将会返回没有该属性的报错
2、setattr 设置对象属性
setattr(对象 , '对象属性' , 值)
3、hasattr 判断对象是否有对应的属性以及方法
变量名 = hasattr(对象 , '对象属性')
# 该方法返回的是bool类型
4、delattr 删除对象的属性
delattr(对象 , '对象属性')
代码:
class Foo:
def __init__(self , name , age):
self.name = name
self.age = age
def say_hi(self):
print(f'hi 帅哥/美女:{self.name}')
# getattr 获取指定的对象属性
# 变量名 = getattr(对象 , '对象属性' ,设置默认值)
ac = Foo('初雪' , 24)
n = getattr(cx , 'name')
print(n)
h = getattr(cx , 'say_hi')
h()
f = getattr(cx , 'height' , '没有你要看的')
print(f)
# 2、setattr 设置对象属性
# setattr(对象 , '对象属性' , 值)
print(cx.age)
setattr(cx , 'age' , 25)
print(cx.age)
# 3、hasattr 判断对象是否有对应的属性以及方法
# d = hasattr(对象 , '对象属性')
d = hasattr(cx , 'name')
print(d)
a = hasattr(cx , 'height')
print(a)
# 4、delattr 删除对象的属性
delattr(cx , 'age')
# print(cx.age)
2、反射的使用
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
cx = User()
# 没有使用对象反射的情况
choose = input('请输入你要操作的功能:')
if choose == 'login':
cx.login()
elif choose == 'register':
cx.register()
elif choose == 'speak':
cx.speak()
else:
print('输入有误')
使用反射
class User:
def login(self):
print('这个是登录操作')
def register(self):
print('欢迎来注册')
def speak(self):
print('来唠嗑呀!')
ac = User()
# 使用反射
choose = input('请输入你要操作的功能:')
if hasattr(cx , choose):
fun = getattr(cx , choose)
fun()
else:
print('输入有误')
二、异常
异常:就是在程序执行过程中有逻辑等的其他错位导致,使得程序终止运行
异常处理:在程序执行的过程中, 发现错误对其进行处理,让程序可以正常执行不为此错误而被迫停止运行
1、异常错误
1、语法错误:语法错误可以避免——SyntaxError
2、逻辑错误
# TypeError 类型错误,不同数据类型之间的无效操作
# NameError 变量名未定义
# IndexError 下标索引超出范围
2、异常处理
语法格式:
try:
代码块(感觉有问题的代码)
except 异常类型:
判断到上面的代码有异常之后执行的代码
else:
代码没有异常执行的代码
finally:
不管有没有异常都会执行的代码
在异常类型后面加上as 变量名 , 可以获取到这个异常的信息
Exception:可以捕获到所有的异常
try:
res = '初雪 ,加油'
print(res[30])
except IndexError as no:
print('没有那么多')
print(no)
print('在座的各位也加油')
try:
res = '初雪 ,加油'
print(res[50])
except Exception:
print('没有那么多')
else:
print('没毛病')
finally:
print('管你谁 , 我就是加一下油')
print('在座的各位也加油')
3、assert断言
发送AssertionError异常错误
assert 判断表达式 , 返回异常信息(当判断表达式为False是执行)
# 表达是bool类型可以进行使用
x = 100
y = 200
ac = '初雪是个大帅哥'
# assert x > y ,'你的数学谁交的 , 体育老师都不背锅'
assert '丑' in ac ,'说谁丑呢 , 找打 , 回去笔记抄个一百遍'
assert '帅' in ac ,'说谁丑呢 , 找打 , 回去笔记抄个一百遍'
4、定义异常
raise Exception(返回的异常信息)
money = int(input('请输入金额:'))
if money < 550:
raise Exception(f'money不能小于550 , 当前money值为{money} , 交易失败 , 回去吧')
else:
print('交易成功 , 合作愉快 , 期待下期合作哦')