python的反射、异常处理

反射、异常处理

一、反射

反射:通过字符串的形式进行操作对象的属性方法

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('交易成功 , 合作愉快 , 期待下期合作哦')
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的小初雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值