1.反射:

1.1定义:通过字符串映射或修改程序运行时的状态、属性、方法

1.2有以下四个方法:

(1)hasattr(object,str) 判断object对象中是否有对应的方法或属性,返回值:True·、False

class People(object):
'''this is the description of People'''
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def eat(self):
print("%s is eating...."%self.name)
def piao(self):
print("%s is piaoing..."%self.name)
def __call__(self, *args, **kwargs):
print("My name is Mr Wu")
def __str__(self):
return "hello world" man = People("dog","male",19)
if hasattr(man,"name") and hasattr(man,"eat"):
print("hello world!")
#output:hello world!

(2)func = getattr(object,str)根据str去获取object对象中的对应的方法的内存地址或属性的值(调用:func(argument))

class People(object):
'''this is the description of People'''
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def eat(self):
print("%s is eating...."%self.name)
def piao(self):
print("%s is piaoing..."%self.name)
def __call__(self, *args, **kwargs):
print("My name is Mr Wu")
def __str__(self):
return "hello world" man = People("dog","male",19)
func = getattr(man,"eat")
func() #dog is eating....
name = getattr(man,"name")
print(name) #dog

(3)delattr(object,str) 删除object对象中的str对应的方法或属性

class People(object):
'''this is the description of People'''
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def eat(self):
print("%s is eating...."%self.name)
def piao(self):
print("%s is piaoing..."%self.name)
def __call__(self, *args, **kwargs):
print("My name is Mr Wu")
def __str__(self):
return "hello world" man = People("dog","male",19)
delattr(man,"name")
print(man.name) #AttributeError: 'People' object has no attribute 'name'
delattr(man,"eat")
man.eat()#AttributeError: eat

(4)setattr(x,y,v)相当于x.y = v,设置新的属性或方法(可修改原有的属性和方法)

class People(object):
'''this is the description of People'''
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def eat(self):
print("%s is eating...."%self.name)
def piao(self):
print("%s is piaoing..."%self.name) def sleep(self):
print("%s is sleeping...."%(self.name))
name = "Mr Wu" man = People("dog","male",19)
setattr(man,"sleep",sleep)
man.sleep(man) #dog is sleeping....
setattr(man,"name",name)
print(man.name) #Mr Wu

2.异常处理

2.1 概述:

Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

2.2 python中所有的标准异常类

2.2 语法格式

try:

    代码块

except 异常名称 as e:

    print(e) #输出异常的内容

except 异常名称 as e:

    print(e) #输出异常处理

...............

特别地:

except Exception as e:

    #如果不知道异常具体是什么类型,可以使用Exception

else:

    #如果没有出现前面的异常则执行这条语句

finally:
    #不管有没有出现前面的异常都会执行这条语句

注:如果已经捕获到了try下的一条异常,那么就不会再捕获其他异常了

代码实例:

names = ["Mr Wu","Ms Li"]
dict_names = {"name":"Mr Wu","age":19}
try:
print(names[3])
dict_names["Mr Wang"]
except IndexError as e:
print("出错了:",e)
except KeyError as e:
print("出错了:",e)
except Exception as e:
print("未知错误:",e)
#output:出错了: list index out of range
names = ["Mr Wu","Ms Li"]
dict_names = {"name":"Mr Wu","age":19}
try:
print(names[3])
dict_names["Mr Wang"]
#except IndexError as e:
# print("出错了:",e)
#except KeyError as e:
# print("出错了:",e)
except Exception as e:
print("未知错误:",e)
#output:未知错误: list index out of range

2.3 自定义异常

我们可以自己定义异常类,并且触发执行这个异常。

注:自定义的异常必须继承异常类基类Exception,并通过raise语句实例化这个类

class AlexException(Exception):
def __init__(self,msg):
self.message = msg
try:
raise AlexException("\033[1;41m数据库连接失败\033[0m")
except AlexException as e:
print(e)
#output:数据库连接失败

最新文章

  1. 第五课 CSS3 and H5 知识点
  2. [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证
  3. Redis在Linux下的安装和启动和配置
  4. Beta阶段站立会议-02
  5. 根据linux内核源码查找recv返回EBADF(errno 9)的原因
  6. Oracle中replace函数的使用
  7. 实用的Android代码片段集合(精)
  8. 转发:[Python]内存管理
  9. TRIZ系列-创新原理-29-气动或液压结构原理
  10. PHP自学之路---雇员管理系统(2)
  11. Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)
  12. Python_正则表达式一
  13. SSM-MyBatis-16:Mybatis中延迟加载
  14. Sublime Text2支持Vue语法高亮显示
  15. VScode中python环境配置
  16. 论文笔记:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
  17. iOS:自定义导航栏,随着tableView滚动显示和隐藏
  18. C# winForm webBrowser页面中js调用winForm类方法(转)
  19. java 如何对由json对象构成的数组形式的字符串进行遍历?
  20. bzoj1081

热门文章

  1. HDU 5046
  2. PAAS平台的web应用性能測试与分析
  3. UI_UINavigationController
  4. linux命令用来查看日志关键字
  5. Makefile中怎样调用python和perl文件为自己提供须要的数据
  6. luogu2437 蜜蜂路线
  7. php 0,null,empty,空,false,字符串关系(转)
  8. weixin js接口
  9. Linux Shell Scripting Cookbook 读书笔记 5
  10. 基本的Mysql语句