美文网首页
33.2-异常概念、产生和捕获

33.2-异常概念、产生和捕获

作者: BeautifulSoulpy | 来源:发表于2020-01-03 18:35 被阅读0次

    每天早上起床,你都有两个选择,不是选择平凡地度过今天,就是选择在今天创造属于你生命中的奇迹!

    总结:

    1. Python 中比较奇怪的是错误被放到异常类中去;
    2. 尽可能的避免错误;尽可能的捕获、处理各种异常;

    1. Python异常与错误处理基本概念

    错误 Error

    逻辑错误:算法写错了,加法写成了减法
    笔误:变量名写错了,语法错误
    函数或类使用错误,其实这也属于逻辑错误
    总之,错误是可以避免的

    异常 Exception

    本意就是意外情况
    这有个前提,没有出现上面说的错误,也就是说程序写的没有问题,但是在某些情况下,会出现一些意外,导致程序无法正常的执行下去。
    例如open函数操作一个文件,文件不存在,或者创建一个文件时已经存在了,或者访问一个网络文件,突然断网了,这就是异常,是个意外的情况。
    异常不可能避免

    错误与异常

    在高级编程语言中,一般都有错误和异常的概念,异常是可以捕获的,并被处理的;但是错误是不能被捕获的;

    2. 常见的异常与错误种类

    Python中不同的异常可以用不同的类型去标识,不同的类对象标识不同的异常,一个异常标识一种错误。

    (1) AttributeError:试图访问一个对象没有的属性,比如foo.y,但是foo没有属性y
    (2) IOError:输入/输出异常;基本上是无法打开文件
    (3) ImportError:无法引入模块或包;基本上是路径问题或名称错误 (4) IndentationError:语法错误(的子类);代码没有正确对齐
    (5) IndexError:下标索引超出序列边界
    (6) KeyError:试图访问字典里不存在的键
    (7) KeyBoardInterrupt:ctrl+c被按下(在cmd命令下)
    (8) NameError:使用一个还未被赋予对象的变量
    (9) SyntaxError:Python代码非法错误。代码不能编译
    (10) TypeError:传入对象类型与要求的不符合
    (11) UnboundLocalError:试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,才导致你以为正在访问它
    (12) ValueError:传入一个调用者不期望的值,即使值的类型是正确的

    3. 处理异常

    抛出异常后,整个程序就会被终止,当然理想情况下,我们是希望程序不被终止,而是捕捉到这次异常。

    try/except/finally语句

    范例:

    try:
        尝试运行程序
        出现异常后这段代码就不会运行
    except 错误类 as e:
        发生异常运行这部分代码
    

    有多个异常错误时,这种写法就有局限性,我们可以这样来写:

    #第一种方法
    try:    
        print(1/0)    
        print(name)
    except (ZeroDivisionError,NameError) as e:    
        print("错误:{}".format(e))
    
    #第二种方法
    try:    
        print(1/0)
        print(name)
    except ZeroDivisionError as e:    
        print("错误:{}".format(e))
    except NameError as e:    
        print("错误:{}".format(e))
    # 错误:division by zero
    
    

    程序存在多个except异常时,程序最多只有一个会被执行并捕捉,简单的说,最先捕捉的异常会被执行,其他都会被忽略

    事先并不知道有多少异常,应该怎么处理了?我们可以用Exception,他是其他非系统异常的基类。或者在except语句块后面不加异常类。

    try:    
        print(1/0)    
        print(name)
    except Exception as e:    
        print("错误:{}".format(e))
    
    # except 后什么都不写,什么异常都捕获;
    try: 
        print(1/0)    
        print(name)
    except:    
        print("错误")
    

    finally,其作用是不管有无异常,finally内的语句都会被执行。
    finally 中一般放置资源,释放管理工作;

    这里读取文件,不管是否出现异常,都会执行关闭文件的操作。
    try:
        f = open('test.txt','r')
    except:    
        print('erro')
    finally:
        f.close()
    

    相关文章

      网友评论

          本文标题:33.2-异常概念、产生和捕获

          本文链接:https://www.haomeiwen.com/subject/tutboctx.html