大纲:
1.反射
2.异常处理
3.断言
4.动态导入模块
一.反射
1.概念:
字符串映射或程序修改时的状态,属性,方法
1).根据字符串形式导入模块
import os#一般形式的导入模块
__import__ ("os") #通过字符串的形式导入模块
#多层模块的导入方式
from multiprocessing import process
__import__("multiprocessing.process",fromlist=True)#若不加,fromlist=True,则导入的是目录
2).根据字符串形式去对象中操作其他成员
2.一般看到反射,我们就要想到反射相关的4种方法,getattr,hasattr,setattr,delattr,下面我们具体讲讲这4种函数的用法
class bar(object):
def __init__(self):
self.name="coco"
def func(self):
print("in func")
d=bar()
print(hasattr(d,"func"))#根据字符串func来判断对象d中是否含有func()的方法 #True
b=getattr(d,"func")#根据字符串"func"去获取d里面的对应方法的内存地址,来调用dunc()方法
b()
print("原来的名字:",d.name)#原来的名字: coco
set_name=setattr(d,"name","niko")#通过setattr方法修改成员变量的值----设置新的属性
print("修改后的名字:",d.name)#修改后的名字:niko
del_name=delattr(d,"name")#删除成员变量----删除属性
print("删除后的结果:",del_name)#删除后的结果: None
二.异常处理
1.什么是异常?python有哪些异常处理的方法?
异常就是在程序的运行中突然发生了某个事件阻碍了程序的正常执行,python无法处理这个程序时,就会抛出一个异常(报错),停止程序的执行
python提供了两种方法来处理异常:异常处理,断言
2.为什么要使用异常处理?
虽然程序运行过程中产生了错误,但是我么并不想让用户看到,或者程序出错后我们不想让它崩溃,还想继续执行下面的内容,这个时候就要用到异常处理
3.实例—try..except..else..finally方法
1)最常用的模式
class bar(object):
def __init__(self,name):
self.name = name
def func(self):
print("in func")
d=bar() #运行结果TypeError: __init__() takes exactly 2 positional arguments (1 given)
# 怎样出现以上程序不报错呢?
try:#执行try里面的程序
class bar(object):
def __init__(self,name):
self.name = name
def func(self):
print("in func")
d=bar()
except TypeError as e:#异常的错误名称是TypeError,这个异常的具体内容是e
print("传入参数发生错误",e)
except IndentationError as e1:
print("缩进错误",e1)
else:
print("没有错误哦")
finally:#无论怎样程序都要执行的
print("我都要执行!")
#执行结果 传入参数发生错误 __init__() takes exactly 2 positional arguments (1 given)
#我都要执行!
2)异常处理的时候也可以不写异常的名称,只是这种方式不好定位
try:
class bar(object):
def __init__(self,name):
self.name = name
def func(self):
print("in func")
d=bar()
except :
print("发生了错误")
else:
print("继续,没有错")
3)自定义异常
语法:
raise [Exception [, args [, traceback]]]
实例
def function(num):
if num< 1:
raise Exception("Invalid num!", num)
# 触发异常后,后面的代码就不会再执行
三.断言—一种异常处理的方式
name="coco"
assert type(name) is str#判断name是不是字符串,是就继续向下执行
print("yes")
assert type(name) is int#AssertionError
print("yes")
四.补充:动态导入模块
#1.导入字符串模块
# __import__("lib.aa")#lib下的aa模块
#2.官方建议导入方式
import importlib
importlib.import_module("lib.aa")