zoukankan      html  css  js  c++  java
  • 异常处理

    1.什么是异常

      异常发生之后,异常之后的代码就不执行了

    2.什么是异常处理

      python解释器检测到错误,除法异常(也允许程序员自己触发异常)

      程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

      如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

    3.为什么要进行异常处理

      python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行.所以必须提供一种异常处理机制来增强程序的健壮性和容错性

    4.如何进行异常处理

      

    1 while True:
    2     try:
    3         x = int(input("输入一个数字:"))
    4         break
    5     except ValueError:
    6         print("1")

    以上例子中,让用户输入一个合法的整数,但是允许用户中断这个程序,用户中断的信息会引发一个KeyboardInterrupt异常.

    try语句按照如下方式工作:

      首先,执行try子句(在关键字try和关键字except之间的语句)

      如果没有异常发生,忽略except语句,try子句执行后结束

      如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略.如果异常的类型和except之后的名称相符,那么对应的except子句将被执行.最后执行try语句之后的代码

      如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中

    一个try语句可能包含多个except子句,分别来处理不同的特定的异常.最多只有一个分支会被执行

    处理程序将只针对对应的try子句中的异常进行处理,而不是其他的try的处理程序中的异常

    一个except子句可以同时处理多个异常,这些异常将被放在一个括号里称为一个元组,例如:

    1 except(RuntimeError,TypeError,NameError):
    2     pass

    try  except语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后.这个子句将在try子句没有发生任何异常的时候执行,例如:

    1 for arg in sys.argv[1:]:
    2     try:
    3         f = open(arg,"r")
    4     except IOError:
    5         print("can not open",arg)
    6     else:
    7         print(arg,"has",len(f.readlines()),"lines")
    8         f.close()
    9         

    使用else子句比把所有的语句都放在try子句里面要好,这样可以避免一些意想不到的,而except又没有捕获的异常.

    异常处理并不仅仅处理那些直接发生在try子句中的异常,而且还能处理子句中调用的函数(甚至简介调用的函数)里抛出的异常.例如:

    1 def this_fails():
    2     x = 1/0
    3 try:
    4     this_fails()
    5 except ZeroDivisionError as err:
    6     print("有运行错误",error)
    7 
    8 有运行错误:int division or modulo by zero

    万能异常:在python的异常中,有一个万能异常:Exception,它可以捕获任意异常,即:

      

    1 s = "hello"
    2 try:
    3     int(s)
    4 except Exception as e:
    5     print(e)

    如果想对于不同的异常定制不同的处理逻辑,就需要用到多分支

    1 s1 = "hello"
    2 try:
    3     int(s)
    4 except IndexError as e:
    5     print(e)
    6 except KeyError as e:
    7     print(e)
    8 except ValueError as e:
    9     print(e)

    5.主动抛出异常

      使用raie语句抛出一个指定的异常,例如:

      

    1 try:
    2     raise TypeError("类型错误")
    3 except Exception as e:
    4     print(e)
    5 
    6 TypeError:类型错误

    raise唯一的一个参数制定了要被抛出的异常,它必须是一个异常的实例或者是异常的类,(也就是Exception的子类)

    6.断言(assert)

    assert 断言是声明布尔值必须为真的判定,如果发生异常就说明表达式为假

    可以理解assert断言语句为raise-if-not,用来测试表达式,其返回值为假,就会触发异常.

  • 相关阅读:
    两数之和
    swift 结构体
    打家劫舍II
    Swift的访问控制讲解
    swift版 二分查找 (折半查找)
    RAC(ReactiveCocoa)介绍(一)
    变位词
    双向循环链表
    单链表
    顺序链表(C++)
  • 原文地址:https://www.cnblogs.com/s593941/p/9524781.html
Copyright © 2011-2022 走看看