Live2D

python异常处理

一、异常处理

1. 概念

  • 异常就是不正常,当python检测到一个错误时,解释器就无法继续执行下去了,出现了一些错误的提示,这就是所谓的异常。

2. 捕获异常

  • 2.1 try---except

    • 语法:
      try:
          <语句>
      except <异常类名字>:
          <语句>
    • 案例:从键盘输入被除数与除数,求商并打印
      • 传统解决方法
        a = input("请输入被除数:")
        b = input("请输入除数:")
        if a.isdigit() and b.isdigit():
            a, b = int(a), int(b)
            if b != 0:
                print(a / b)
            else:
                print("除零错误")
        else:
            print("输入有误")
      • 使用异常处理的解决方法
        try:
            a = int(input("请输入被除数:"))
            b = int(input("请输入除数:"))
            print(a / b)
        except Exception:
            print("输入有误/除零错误")
  • 2.2 except 多个异常

    • 语法:多个异常分开写(注意异常<父子>类的顺序)
      try:
      	<语句>        
      except <异常类名字>:
      	<语句>        
      except <异常类名字>:
      	<语句>        
      else:
          # 如果没有异常发生
      	<语句>  
  • 2.3 多个异常写到一个元组中

    • 语法:
      try:
          代码
      except(Exception1[,Exception2[,...ExceptionN]]]):
         	发生以上多个异常中的一个,执行这块代码
  • 2.4 获取异常信息

    try:
        f = open('124.txt', 'r')
        f.write('HelloWorld')
    # 将捕获到的异常存储到到变量errMsg中
    except IOError as errMsg:
        print(errMsg)
  • 2.5 捕获所有异常

    except 不带任何异常
    try:
        a = 2/0
    except:
        print("遇到异常")
    except 父类Exception
    try:
        b = 3/0
    except BaseException as result:
        print(result) 
  • 2.6 捕获异常中else的用法

    try:
        b = 3/1
    except BaseException as result:
        print(result)
    else:
        # 可以访问b的值
        print("没有遇到异常,结果为:%d" % b)
    

      

  • 2.7 try--- finally

    • finally顾名思义: 最终,最后的意思
    • 用处
      • 确保最后一定要执行的
      • 如:文件关闭、数据库关闭、socket关闭等
    • 案例:(文件关闭问题)
      try:
          f = open('123.txt', 'r')
          # 如果遇到异常,后续代码不再执行,直接执行except模块
          f.write('HelloWorld')
          # 在这关闭文件是否合适
          f.close()
      except IOError as errMsg:
          print(errMsg)
      else:
          print("写入文件成功")
      finally:
          # 最终一定要关闭文件(打印,验证是否执行)
          try:
              f.close()
          except NameError:
              print("文件不存在")
          else:
              print("finally,文件关闭")

3. 抛出自定义异常

3.1自定义异常

  • 通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式
  • 自定义异常类,直接或者间接继承Exception
    class GenderException(Exception):
        def __init__(self):
            super().__init__()
            # args为BaseException的属性
            self.args = '性别只能为男或者女'
            # 也可以自定义一个属性
            self.msg = '性别只能为男或者女'

3.2手动抛出自定义异常

  • 语法:
    raise [Exception [, args [, traceback]]]
  • 例:
    class Student(object):
        def __init__(self, name, gender, age):
            self.__name = name
            self.setGender(gender)
            self.__age = age
        def setGender(self, gender):
            if gender == '男' or gender == '女':
                self.__gender = gender
            else:
                # 抛出一个自定义的性别异常(也可以以列表的形式抛出多个异常)
                # raise [GenderException(), Exception()]
                raise GenderException()
        
    try:
        stu1 = Student('大黄', '男1', 18)
    except GenderException as e:
        # 打印自定义的信息
        print(e.msg)
        # 打印父类属性的信息
        print(e.args)
    

      

posted @ 2019-08-17 10:32  穆梓先生  阅读(298)  评论(0编辑  收藏  举报
$(function(){ $('#returnTop').click(function () { $('html,body').animate({ scrollTop: '0px' }, 800); returnfalse; }); });