Python异常

异常

  • 定义:异常是指在语法正确的前提下,程序运行时报错就是异常

  • 当Python脚本发生异常时我们应该捕获处理它,否则程序会终止执行

    print("hello world")
    print(1/0)
    print("代码结束")
    
  • 异常处理 try...except

    • 程序从上往下执行,先执行try中的代码,如果代码中有异常,则不会继续执行try下面的代码,会执行except中的异常diamante

    • 如果try没有异常,则不会执行except中的代码

      try:
          print("hello")
          # print(1 / 0)
          print("world")
      except:
          print("try中的代码有问题")
      
      print("代码结束")
      
    • 异常类型:ZeroDivisionError,IndexError,NameError,FileExistsError,FileNotFoundError,TypeError

  • try...except...else

    • try正常执行结束,不会走except,走else

    • try中有异常,会走except,不走else

      try:
          print("a")
          # print(1/0)
          print("b")
      # except ZeroDivisionError:
      #     print("0不可以是除数")
      except NameError:
          print("出现命名错误")
      else:
          print("没有异常")
      不写具体的异常类型,默认捕获所有异常
      
    • Exception 是所有异常的父异常,try中抛出的异常,Exception 都可以捕获

  • finally:无论代码是否有异常,都会走finally

    try:
        print("a")
        # print(1/0)
        print("b")
    except BaseException:
        print("出现异常")
    else:
        print("没有异常")
    finally:
        print("有无异常都会执行的代码")
    
  • 获取异常信息描述

    try:
    	执行代码
    except Exception as e:
    	print(e)
        
    try:
        print("a")
        print(1/0)
        print("b")
    except Exception as e:
        print(e)
    

触发异常

  • 用户可以根据业务逻辑手动的抛出异常。

    并且用户可以根据需求来抛出系统异常(Python 已经定义好的异常)和用户自定义的异常

    #用户注册,输入注册用户名,用户名全为字母,抛出异常
    try:
        name = input("请输入注册用户名:")
        if name.isalpha():
            raise Exception("不可以全部是字母")
    except Exception as e:
        print(e)
    
  • 当程序中的异常类型不满足时,我么可以自定义异常类型

    #用户注册,输入注册用户名,如果用户名长度小于5,抛出自定义异常,输出异常信息:输入太短
    
    class ShortInputException(Exception):
        # def __init__(self,msg):
        #     self.msg = msg
        #
        # def __str__(self):
        #     return self.msg
        pass
    
    try:
        name = input("请输入注册用户名:")
        if len(name)<5:
            raise ShortInputException("输入太短")
    except Exception as e:
        print(e)
    
    • 判断输入的字符串长度,如果小于指定长度就抛出自定义异常

      class MyException(Exception):
          def __init__(self,length,atleast):
              self.length = length
              self.atleast = atleast
          def __str__(self):
              return f"你输入字符串长度是{self.length},规定长度是{self.atleast}"
      
      try:
          content = input("请输入内容:")
          if len(content)<5:
              raise MyException(len(content),5)
      except Exception as e:
          print(e)
      
posted @ 2020-05-13 16:12  慕|白  阅读(133)  评论(0)    收藏  举报