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)

isinstance和issubclass、动态模块导入、异常处理详解编程语言

5.自定义异常与异常详情

在进行软件开发的过程中,往往会引入第三方模块,此时的异常并不是标准的异常,所以我们需要自己定义异常,并捕获。

isinstance和issubclass、动态模块导入、异常处理详解编程语言

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

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12442.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论