11.Python的异常处理机制

初探异常

  • 什么是异常与异常处理

    • 异常就是错误
    • 异常会导致程序崩溃并停止运行
    • 能监控并捕获到异常,将异常部位的程序进行修理。使得程序继续正常运行
  • 异常的语法结构

    • try:
        	<代码块1> #被try关键字检查并保护的业务代码
      except <异常类型>:
        	<代码块2> #代码块1出现错误后执行的代码块
      
  • 异常的语法:

    • a = 1 / 0
      print(a)  # a=1/0 ZeroDivisionError: division by zero
      
    • try:
          a = 1 / 0
      except:
          print(‘0不能被整除‘)#输出到控制台
          print(‘程序继续执行‘)#输出到控制台
      
  • 捕获通用异常

    • 无法确定是哪种异常的情况下使用的捕获方法

    • try:
        <代码块>
      except Exception as e:
        <异常代码块>
      
    • try:
          a = 1 / 0
      except Exception as e:
          print("try代码块中的语句出现错误,具体错误是:{}".format(e))  # try代码块中的语句出现错误,具体错误是:division by zero
      
  • 捕获具体异常

    • 无法确定是哪种异常的情况下使用的捕获方法
    • Except <具体的异常类型> as e
  • 捕获多个异常1

    • try:
          a = 1 / 0
      except ZeroDivisionError as e:
          print("try代码块中的语句出现错误,具体错误是:{}".format(e))  # try代码块中的语句出现错误,具体错误是:division by zero
      except  Exception  as e:
          print("try代码块中的语句出现错误,具体错误是:{}".format(e))  # try代码块中的语句出现错误,具体错误是:division by zero
      
  • 捕获多个异常2

    • try:
          a = 1 / 0
      except (ZeroDivisionError, Exception) as e:
          print("try代码块中的语句出现错误,具体错误是:{}".format(e))  # try代码块中的语句出现错误,具体错误是:division by zero
      

Python中的异常类型

  • 异常名称 说明
    Exception 通用的异常类型(基类)
    ZerorivisionError 不能整除0
    AttributeError 对象没有这个属性
    IOError 输入输出操作失败
    IndexError 没有当前的索引
  • 异常名称 说明
    KeyError 没有这个键值(key)
    NameError 没有这个变量(未初始化对象)
    SyntaxError Python语法错误
    SystemError 解释器的系统错误
    ValueError 传入的参数错误

异常中的finally

  • finally的功能

    • 无论是否发生异常,一定会执行的代码块
    • 在函数中,即便在try或except中进行了return也依然会执行finally语法块
    • try语法至少要伴随except或finally中的一个
  • finally的用法

    • try:
        <代码块1>
      except:
        <代码块2>
      finally:
        <代码块3>
      
  • finally的历史

    • 在Python2.5之前的版本,finally需要独立使用,不可以和try配合,之后才演变成现在的模式

自定义抛出异常-raise

  • 将信息以报错的形式抛出

  • 语法结构

    • 用法:
      • raise 异常类型(message)
    • 参数:
      • message:错误信息
    • 返回值:
      • 无返回值
  • 继承基类---Exception

  • 在构造函数中定义的错误信息

  • 示例代码:

    • class NewError(Exception):
          def __init__(self, message):
              self.message = message
      
      
      def test():
          raise NewError(‘this is a bug‘)
      
      
      def test1():
          try:
              test()
          except Exception as e:
              print(e)
      
      test1()  # this is a bug
      

断言的功能--assert

  • 用于判断一个表达式,在表达式条件为false的时候触发异常。

  • 语法格式

    • 用法:
      • assert expression
    • 参数:
      • expression:表达式,一般是判断相等,或者判断是某种数据类型饿bool判断的语句
    • 返回值:
      • 无返回值
  • 示例代码:

    • assert 1 > 2
      
      ‘‘‘
          assert  1>2
      AssertionError
      
      ‘‘‘
      

bug定义

  • 程序中出现的错误,但又没有通过异常去捕获,以至于直接抛出,导致程序的崩溃。
  • bug一词的由来
    • bug指的是小虫
    • 飞入计算机中导致机器停止

11.Python的异常处理机制

上一篇:微信关闭当前浏览窗口


下一篇:$nextTick是异步的