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:数据库连接失败

python第七周:反射、异常的更多相关文章

  1. 从零开始学Python第七周:面向对象进阶(需修改)

    一,类的属性 (1)示例 通过属性获取已经创建对象的个数 class Plane: pCount = 0 #类属性 def __init__(self,name,category): self.nam ...

  2. 2003031121——浦娟——Python数据分析第七周作业——MySQL的安装及使用

    项目 要求 课程班级博客链接 20级数据班(本) 作业要求链接 Python第七周作业 博客名称 2003031121--浦娟--Python数据分析第七周作业--MySQL的安装及使用 要求 每道题 ...

  3. python金牌班第七周周末总结

    python金牌班第七周周末总结 面向对象前戏 1.我们在学习面相对像之前有一个推导过程如何将我们之前写的东西,从一串代码转向给对象服务. 2.实例 我们首先模拟了两个物种进行战斗的场景,然后我们发现 ...

  4. 简学Python第七章__class面向对象高级用法与反射

    Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群  群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...

  5. 201871010132-张潇潇-《面向对象程序设计(java)》第六-七周学习总结

    201871010132-张潇潇-<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  6. 张兴盼-201871010131 《面向对象程序设计(java)》第六、七周学习总结

    张兴盼-201871010131 <面向对象程序设计(java)>第六.七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  7. 201521123072《java程序设计》第七周总结

    201521123072<java程序设计>第七周总结 标签: java 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源 ...

  8. 201521123122 《java程序设计》第七周学习总结

    201521123122 <java程序设计>第七周实验总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析 1.1 ...

  9. bug终结者 团队作业第六、七周

    bug终结者 团队作业第六.七周 作业要求:团队作业第六.七周 博客编辑:20162322 朱娅霖 一.修改<需求规格说明书> <需求规格说明书>2.0版(即初稿) <需 ...

随机推荐

  1. JavaThread等待/通知经典范式

    JavaThread等待/通知经典范式 package com.stono.thread; import java.text.SimpleDateFormat; import java.util.Da ...

  2. python基于selenium+cv2+numpy实现登录某大型电商系统

    首先贴上我的安装包 一.selenium安装 I.打开pycharm,点击Settings,找到Project Interpreter,点击右边的下拉菜单下的show All...选项 II.点击sh ...

  3. IJKPlayer问题集锦之不定时更新

    1.IJKPlayer 不像系统播放器会给你旋转视频角度,所以你需要通过onInfo的what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED去获取 ...

  4. html转义字符换行以及回车等的使用

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 html换行回车转义字符 换行Line feed   回车Carriage Return  html中换行转义字符 的使 ...

  5. [Pulgin] 前端上传组件Plupload使用指南

    我之前写过一篇文章<文件上传利器SWFUpload使用指南>,里面介绍了上传组件SWFUpload的使用方法,但现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SW ...

  6. Java攻城狮之基础练习题------经典例题

    (一)键盘录入1----7,分别于控制台输出对应的周一,周二,周三,周四,周五,周六,周天. (二)设置一个数组,求出数组中对应的最大值以及索引. (三)在控制台输出9x9乘法口诀表. (四)使用冒泡 ...

  7. 使用multiprocessing解决PyMuPDF不支持多线程加载导致的界面卡死无响应问题,及一个PyQt5实现的简易PDF阅读器例子

    最近在用PyMuPDF实现一个PDF阅读器,发现PyMuPDF在加载某些epub时耗时非常长,有的长达10几秒,会导致界面卡死无响应. 尝试用多线程后台加载,发现还是不能解决问题,和作者交流(issu ...

  8. MAVEN 杂记

    MAVEN中央仓库 http://repo.maven.apache.org/maven2http://repo1.maven.org/maven2/http://mvnrepository.com/ ...

  9. Meson使用

    安装 Meson是基于python3实现,至少需要python3.5才能运行,默认采用ninja作为后端.在Ubuntu下最简单的是通过pip3安装 $ sudo apt-get install py ...

  10. JavaScript DOM 总结

    一.DOM基础1.节点(node)层次Document--最顶层的节点,所有的其他节点都是附属于它的.DocumentType--DTD引用(使用<!DOCTYPE>语法)的对象表现形式, ...