• python异常 Exception


    异常 Exception

      什么是错误:
        错误是指由于逻辑或语法等导致一个程序无法正常执行的问题

      什么是异常
        异常是程序出错时标识的一种状态

      作用:
        用于信号,通知上层调用者有错误产生,需要处理

    try 语句的两种语法:
      try-except 语句
      try-finally 语句

    try-except语句
      语法:

        try:
          可能触发异常的语句
        except 错误类型1 [as 变量1]:
          异常处理语句1
        except 错误类型2 [as 变量2]:
          异常处理语句2
        except (错误类型3,错误类型4) [as 变量3]:
          异常处理句块3
        ...
        except:
          其它异常处理语句
        else: 
          未发生异常语句
        finally:
          最终语句
        注: [] 代表其中的内容可以省略
        作用:
          偿式捕获异常,得到异常通知,将程序由异常流程转为正常流程并继续执行
    View Code
      # 此示例示意异常处理语句try-except 的语法和用法
      def div_apple(n):
        print("%d个苹果你想分给几个人?" % n)
        s = input("请输入人数: ")
        cnt = int(s) # 可能触发ValueError类型的错误
        result = n / cnt # 可能触发ZeroDivistion类型的错误
        print('每个人分了', result, '个苹果')
    
      try:
        print("开始分苹果")
        div_apple(10)
        print('分苹果成功!')
      except ValueError:
        print("分苹果过程中出现错误,分苹果失败!!!")
      except ZeroDivisionError:
        print("没有人来,苹果被收回,自己吃了!!!")
    
      print("程序正常退出")
    View Code
      # 此示例示意异常处理语句try-except 的语法和用法
      def div_apple(n):
        print("%d个苹果你想分给几个人?" % n)
        s = input("请输入人数: ")
        cnt = int(s) # 可能触发ValueError类型的错误
        result = n / cnt # 可能触发ZeroDivistion类型的错误
        print('每个人分了', result, '个苹果')
    
      try:
        print("开始分苹果")
        div_apple(10)
        print('分苹果成功!')
      except (ValueError, ZeroDivisionError):
        print("分苹果失败,苹果不分了!")
    
      print("程序正常退出")
    View Code

    try-finally语句
      语法:
        try:
          可能触发异常的语句
        finally:
          最终语句
        说明:
          finally 子句不可以省略一定不存在except 子句
        作用:
          通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行try-finally 语句不会改变程序的(正常/异常)状态

      # 此示例示意try-finally语句的作用和用法
      def fry_egg(): # 煎鸡蛋
        print("打开天燃气...")
        try:
          count = int(input('请输入鸡蛋个数: '))
          print('成功煎了', count, '个鸡蛋')
        finally:
          print("关闭天燃气")
    
      try:
        fry_egg()
      except:
        print("煎鸡蛋过程中出错")
    
      print("程序正常退出")
    View Code

    raise 语句
      作用:
        触发一个错误,让程序进入异常状态发送错误通知给调用者
      语法:
        raise 异常类型
        或
        raise 异常对象
        或
        raise # 重新触发上一次异常

      # 此示例示意raise语句的作用和用法
      def make_except():
        print('函数开始')
        # 在此处发错ValueError类型的错误通知给上层调用者
        raise ValueError
    
        print("函数结束")
    
      try:
        make_except()
      except ValueError:
        print("收到make_except函数内部发生的错误通知!!!")
    
      print("程序运行结束")
    View Code
      # 此示例示意用raise语句来传递错误信息
      def fx():
        print("fx开始")
        # ... 此处可能会触发异常
        error = ValueError("这是错误信息!!!")
        raise error
    
        print("fx结束")
    
      def fy():
        print('fy开始')
        try:
          fx()
        except ValueError as e:
          print("fx函数发生错误,e=", e)
          raise # 等同于 raise e
        print('fy结束')
    
      try:
        fy()
      except ValueError as err:
        print("收到fy函数内部发生了错误,数据是", err)
        print("程序正常结束")
    View Code

    assert语句(断言语句)
      语法:
        assert 真值表达式,错误数据(通常是字符串)
      作用:
        当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态
    等同于

      if bool(真值表达式) == False:
      raise AssertionError(错误数据)

      def get_age():
        '''此函数只返回1~140的整数'''
        s = input('请输入学生年龄:')
        a = int(s)
        assert 1 <= a <= 140, '年龄超出范围'
        return a
    
      try:
        age = get_age()
        print('学生的年龄是:',age)
      except ValueError:
        print('用户输入的不是整数!!')
    View Code

    异常相关的语句:
      try-except 语句
        接收错误通知
      try-finally 语句
        无论是正常流程还是异常流程,执行必须要执行的语句
      raise 语句
        触发错误通知,让程序进行异常流程
      assert 语句
        根据条件触发AssertionError类型的异常通知,让程序进入异常流程

  • 相关阅读:
    Java 实现 Word 文档分栏效果
    Java 在PPT中添加SmartArt图形
    Java 创建 Excel 数据透视表
    Java分布式架构下如何实现分布式锁
    为什么选择学习Java语言的人越来越多?
    浅析JAVA中VO、DTO、DO、PO的了解
    Java基础之何为动态代理?
    Java三大框架是什么?
    android 系统裁剪 ​
    java怎么就能跨平台了呢
  • 原文地址:https://www.cnblogs.com/zhaoyang1997/p/10548797.html
Copyright © 2020-2023  润新知