zoukankan      html  css  js  c++  java
  • 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)
      

        

  • 相关阅读:
    JS 表单submit() 提交无效的问题
    thinkphp中连接oracle时封装的方法无法用
    Struts2 开发流程(转)
    oracle wm_concat(column)函数的使用(转)
    js点击按钮后显示时间自动减少提示
    Windows Server 2008 R2安装过程
    Spring学习之旅(1) 第一个Controller
    Groovy系列 Groovy集合
    Groovy系列 安装Groovy
    VMWare实现共享目录
  • 原文地址:https://www.cnblogs.com/songdanlee/p/11367688.html
Copyright © 2011-2022 走看看