isinstance和issubclass、动态模块导入、异常处理
一、isinstance和issubclass |
- isinstance:判断某个对象是否是某个类的实例,返回True或Flase
- issubclass:判断某个类是否是某个类的子类。
例如:
class Foo(object): def __init__(self,name): self.name = name class bar(Foo): pass obj=Foo('wd') print(isinstance(obj,Foo))#判断obj是否是Foo的实例 print(issubclass(bar,Foo))#判断bar是否是Foo的子类
二、动态模块导入 |
在很多时候,我们编写的一个模块需要动态导入,普通的import已经无法满足我们需求,importlib提供了动态导入模块方法,import_moudule(模块名字),参数为字符串。
import importlib importlib.import_module('ftp_server') #__import__('ftp_server') #这是解释器自己内部用的,与上面效果一致
三、try、except异常处理 |
1.异常处理基础
在coding过程中,运行是或多或少都会出现异常,代码出异常后会自动停止,异常处理显得格外的重要,python中异常处理采用了try和except实现,如果捕捉到了异常代码会继续往下执行而不会报错,基本语法如下:
try: 代码块 except 异常 as e:#将异常取别名为e pass
例如:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D try: my_list=[1,2,3] my_list[10]=2#没有索引为10的元素,不捕捉异常会报错 except IndexError as e: print(e) print('捕捉到异常了') 结果: list assignment index out of range 捕捉到异常了
2.一次捕获多个异常
如果代码中需要存在多个异常,捕获多个异常的时候,只要第一个异常捕获到了,try中的代码将不会执行,方法有两种:
- 多个except
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D a='wd' my_list=[1,2,3] try: my_list[10]=1 int(a) except ValueError as e: print(e) print('走到了Value Error') except IndexError as e: print(e) print('走到了Index Error') #异常不会有顺序,只要第一次的捕获到了,try语句中的代码将不会执行,转而执行except下面代码
结果:
list assignment index out of range
走到了Index Error
- 一个except中写多个异常。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D a='wd' my_list=[1,2,3] try: my_list[10]=1 int(a) except (ValueError,IndexError) as e: print(e) print('走到了这里') #异常不会有顺序,只要第一次的捕获到了,try语句中的代码将不会执行,转而执行except下面代码 结果: list assignment index out of range 走到了这里
3.捕获绝大多数异常(Execption)
Execption中包含了所有的python中自带的异常,但并不能捕捉类似与语法错误,缩进错误的异常。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:W-D a='wd' my_list=[1,2,3] try: my_list[10]=1 int(a) except Exception as e: print(e) print('走到了这里') 结果: list assignment index out of range 走到了这里
4.主动触发异常(raise)
5.自定义异常与异常详情
在进行软件开发的过程中,往往会引入第三方模块,此时的异常并不是标准的异常,所以我们需要自己定义异常,并捕获。
Exception类与BaseException类
Exception类是BaseException类的子类,从源码中可以看到,Exception类中主要有两种方法用于异常处理,即
1.__init__()构造方法,用于实例化异常,参数为获取异常内容。
2.__str__()方法,我们知道该方法一般用于print打印。
6.try,except其他语法结构
try: # 主代码块 pass except KeyError,e: # 异常时,执行该块 pass else: # 主代码块执行完,执行该块 pass finally: # 无论异常与否,最终执行该块 pass
7.异常处理--断言
assert即断言,也用于异常处理,有些时候在某些特定的场景发挥优雅的作用。
语法:
assert 条件判别式
抛出异常的方法为,条件判别式失败则抛出异常
name='wd' assert name=='11' print('----------end') 结果: Traceback (most recent call last): File "F:/FTP/异常处理.py", line 21, in <module> assert name=='11' AssertionError