Python反射和异常处理

简介: Python反射和异常处理

一.反射

镜面反射

首先我们访问变量是不能加上双引号,否则会当做字符串处理,但是我偏要字符串进行访问对应的变量

我们可以通过字符串间接使用对象名或者类名,方法名

1.1getattr反射

查询对象属性值或方法

#格式

变量名 = getattr( 对象名 , "对象方法名/对象属性名" , 默认值 )  -->默认值是自己设定的

class People :
    def __init__(self,name ,age):
        self.name = name
        self.age = age
 
    def speak(self):
        print('hhh')
 
stu1 = people('张三',18)
stu2 = people('李四',21)
 
getattr_1 = getattr(stu1, "name" , True)
print(getattr_1)
 
getattr_2 = getattr(stu1, "sex" , False)
print(getattr_2)

结果:

1.2setattr

作用 : 建立对象属性

#格式

setattr(对象名 , "属性名" , 数值)

class People :
    def __init__(self,name ,age):
        self.name = name
        self.age = age
 
stu1 = people('张三',18)
 
print(stu1.__dict__)
 
setattr(stu1,'sex','男')
print(stu1.__dict__)

结果:

1.3hasattr

作用:判断是否存在该属性或方法

#格式

hasattr(对象 , '' 对象属性 '' )

class People :
    def __init__(self,name ,age):
        self.name = name
        self.age = age
 
    def speak(self):
        print('hhh')
 
stu1 = people('张三',18)
stu2 = people('李四',21)
 
a = hasattr(stu1 , 'name')
print(a)
b = hasattr(stu1,'sex')
print(b)

结果:

1.4delattr

作用:删除对象属性/方法

#格式

delattr( 对象名,"属性名/方法名")

class People :
    def __init__(self,name ,age):
        self.name = name
        self.age = age
 
    def speak(self):
        print('hhh')
 
stu1 = people('张三',18)
stu2 = people('李四',21)
 
print(stu1.__dict__)
 
delattr(stu1,'name')
print(stu1.__dict__)

结果:

1.5应用
class People:
    def register(self):
        print('这是注册功能')
 
    def login(self):
        print('这是登录功能')
 
people_1 = People()
select = input('请输入你的选择')
 
 
if hasattr(people_1,select):#select存在则输出if语句
    getattr(people_1,select)()
else:
    print('输入错误')

二.异常

2.1异常的定义

什么是异常:报错

也可以理解为突然终止程序或者程序效果无法满足需求的时候(异常)

捕捉异常:因为我们在程序编辑中,都会有些我们无法确定,或者确定有问题的代码可以进行预处理,是避免后面程序因为某个代码而正常运行

 

2.2异常错误

1.语法错误:捕捉不了,因为这个语法错误是可以完全避免的 --sytaxError

2.逻辑错误

NameError 没有定义标识符

TypeError 类型错误, 不同类型进行数学计算

IndexError 下标值超出范围

......

2.3异常处理

格式:

try:

       代码块        #认为有问题的代码

except 异常类型:

       代码块        #编写输出指定的代码或者错误原因

else:

       代码块        #如果try没有捕捉到任何异常就运行这个代码

finally:

       代码块        #不管是否捕捉异常都运行这个代码

#Exception可捕捉任何异常

li = [1,2,3]
 
try :
    print(li[100])
except Exception as  message:
    print('没有这么长')
    print(message)
else:
    print('就是这么长')
finally:
    print('不管怎么说它是一个列表')

结果:

2.4assert断言

assert 断言 :判断性的语言  下结论

就是测试, 下判断

在表达式不成立的时候,程序不会继续运行,报错返回异常结果

#格式

assert  判断表达式   返回异常结果

判断表达式:结果为bool类型都可以认为是判断表达式

返回的异常结果是自定义的

cost_monet = 1000
my_money =int(input('请输入你的余额'))
 
assert cost_monet <= my_money,'余额不足'
print(f'购买成功,剩余{my_money-cost_monet}元')

2.5定义异常

自定义一个异常信息

#格式

raise  自定义异常  (返回异常信息)

my_money = int(input('请输入您的余额'))
 
if my_money<1000:
    raise Exception('余额不足,无法支付')
else:
    print(f'支付成功,还剩{my_money-1000}元')

结果:



相关文章
|
1月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
|
1月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
|
3月前
|
Python
|
2月前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
157 73
|
1月前
|
安全 Java 程序员
Python 异常处理!
本文详细介绍了Python中的异常处理,包括try、except和finally语句的使用方法。文章区分了语法错误与异常,并列举了Python中常见的异常类型,如`SyntaxError`、`TypeError`等。通过具体示例展示了如何使用try-except块捕获和处理异常,以及如何结合else和finally子句增强代码的健壮性和可读性。此外,还介绍了如何使用raise语句主动抛出异常。通过合理的异常处理,可以提高程序的可靠性与调试效率,但也可能带来性能开销和代码复杂度的增加。
40 4
|
1月前
|
IDE 开发工具 开发者
Python中的异常处理与调试技巧
【9月更文挑战第32天】在软件开发中,错误和异常是难以避免的。了解如何有效处理这些情况对于编写健壮、可靠的代码至关重要。本文将深入探讨Python中的异常处理机制,介绍如何使用try-except语句捕捉异常,以及如何利用Python的调试工具来诊断问题。通过实际示例,我们将展示如何优雅地处理异常并提高代码质量。
|
2月前
|
对象存储 索引 Python
30天拿下Python之异常处理
30天拿下Python之异常处理
31 3
|
1月前
|
安全 数据库连接 开发者
深度解析Python上下文管理器:优雅资源管理与异常处理
深度解析Python上下文管理器:优雅资源管理与异常处理
21 0
|
3月前
|
PHP 开发者 UED
PHP中的异常处理:从基础到高级探索Python中的列表推导式:简洁而强大的工具
【8月更文挑战第30天】在PHP编程的世界中,异常处理是确保代码健壮性和可靠性的关键机制。本文将引导您了解PHP异常处理的基本概念,并通过实际示例展示如何有效地捕获和处理异常。我们将一起探索try-catch结构、自定义异常类以及高级异常处理技术,让您的PHP代码更加稳固和易于维护。
|
3月前
|
开发者 Python
下一篇
无影云桌面