• 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
  • 相关阅读:
    Python合集之文件操作(二)
    Python合集之文件操作(一)
    Python合集之异常(二)
    Python合集之异常(一)
    Python合集之模块(五)
    Visual Studio 配置额外工具 Windows Terminal 等
    CMakeList.txt
    alpha智能图像(全栈的进阶之路)
    位运算实现多状态控制
    缓存函数 memorize
  • 原文地址:https://www.cnblogs.com/wdliu/p/6736264.html
Copyright © 2020-2023  润新知