• python中的异常


    一、python中用异常对象(exception object)来表示异常的情况

    遇到错误后,回引发异常。如果异常对象并未被处理或者捕捉,则程序就会用所谓的回溯(Traceback ,一种错误信息来终止)

    try:

       open(“abc。txt”,‘+r’)

    except FileNotFoundError

      print(“异常了!”)

    try:

       open(aa)

    except FileNotFoundError:

      print(“异常了!”)

    try:

       open(aa)

    except NameError

      print(“异常了!”)

    异常的抛出机制:

     1.如果在运行时发生异常,则解释器会查找相应的处理语句(成为handlder)

     2.如果在当前的函数里没有找到的话,则它会将异常传递给上一层的调用函数,看看那里能不能处理

     3.如果在最外层(全局main)还是没有找到的话,那么解释器就会推出,同时打印Traceback,以便让用户找到错误产生的原因

    注:

    1.虽然大多数错误会导致异常,但异常不一定代表错误,有时候他们呢只是一个警告,有时候时一个终止信号,例如退出循环等

    2.在python中所有的异常类都继承Exception,所以可以使用他来接收所有类型的异常信息。

    try:

       open(aa)

    except Exception:

      print(“异常了!”)

    3.从python2.5后,所有的异常类都有了新的基类BaseException。Exception同样也继承自baseException来接受所有类型的异常。

    try:

       open(aa)

    except BaseException:

      print(“异常了!”)

    二、定位异常的位置

    上面只是打印出异常信息,但是无法准确定位异常信息的位置。

    try:

       open(“abc.txt”,‘+r’)

    except BaseException as msg

      print(msg)

    注:在BaseException后面定义msg变量用于接收异常信息,并通过print将其打印出来。在python中用逗号代替as

    三、python中常见的异常

    异常 描述
    BaseException 新的有所异常类的基类
    Exception 所有异常类的基类,但继承BaseException类
    AssertionError assert语句失败
    FileNotError 试图代开一个不存在的文件或者目录
    OsError 当系统函数返回一个系统相关的错误,包括I/O故障,如“找不到文件”或者“磁盘已满”时,引发的异常
    NameError 使用一个还未赋值对象的变量
    IndexError 当一个序列超出了范围
    SyntaxError 当解析器遇到一个语法错误时引发
    KeyBoardInterupt ctrl+c被按下,程序被强行终止
    TypeError 传入的对象类型与要求不符
    AttributeError 试图访问的对象没有属性

    四.更多异常用法

    try:
        aa = "测试异常:"
        print(aa)

    except Exception as msg:
        print(msg)
    else:
        print("没有异常!")

    这里对aa变量进行了赋值,所以没有异常将会执行else语句后面的内容。通常else语句只有在没有异常的情况下才会被执行。但有些情况下不管是否出现异常,这些操作都希望能被执行,例如文件的关闭,锁的释放,把数据库连接返还给链接池等操作。我们可以通过使用try。。。except。。。finally...语句来实现这样的需求。

    try:
        #aa = "测试异常:"
        print(aa)
    except Exception as e:
        print(e)
    finally:
        print("没有异常!")

    注:msg和e的功能一样

    @@@下面定义aa变量

    try:
        aa = "测试异常:"
        print(aa)
    except Exception as msg:
        print(msg)
    finally:
        print("没有异常!")

    注:无论是否有异常finally语句都会执行

    五:抛出异常

    print()方法只能答应错误信息,python中提供了raise方法来抛出一个异常信息,下面演示raise的用法。

    from random import randint
    number = randint(1,9)
    if number % 2==0:
        raise   NameError("%d is even"% number)
    else:
        raise   NameError("%d is odd"% number)

    注:通过randint()方法随机生成1到9之间的整数,然后判断这个数字时骑术还是偶数。最后通过raise抛出NameError异常,其实判断奇偶数与NameError之间没有任何关系,这里只是为了掩饰如何通过raise抛出各种类型的异常。

    **raise只能使用python中所提共的异常类,如果自定义一个abcError的异常,则python会告诉你ascError没有定义

  • 相关阅读:
    设计模式(十)——模板方法模式
    用imageROI来增加某范围的像素
    OpenCv练习
    字符串格式化(七)-format
    列表初始化
    设计模式(九)——适配器模式
    右值引用&&
    设计模式(八)——外观模式
    Confluence 6 企业环境或者网站托管的 Java 配置策略
    Confluence 6 管理应用服务器内存设置
  • 原文地址:https://www.cnblogs.com/fengyiru6369/p/7011489.html
Copyright © 2020-2023  润新知