zoukankan      html  css  js  c++  java
  • 异常处理

    异常处理:

    错误分类: 1.语法错误:程序未执行之前python已经做了提示了,飘红状态.

    例如: name , dic = { }  dic["key"]  只写这些内容就会报错.

    2.逻辑错误: 分为可预知的,和不可预知的.

    见过的: num = int(input(">>>"))  #ValueError

    name  #NameError

    if 1>0;  #SyntaxError

    dic = {}

    dic["key"]  #KeyError

    等等很多很多

    什么是异常?

    有错误引发的,而且出现异常就会终止程序.

    为什么要进行异常处理:

    1.异常就会终止程序,用户体验极差.

    2.让编写的代码更简洁.

    异常处理:

    1. if 异常处理 它只能处理简单的逻辑.

    num= input("<<<")

    if num.isdigit():

      num = int(num)

      if 1 <= num <= 5:

        ....

      else:

        print("有非数字类型")

    2.try.异常处理

    遇到报错信息,防止程序终止,执行另一个语句.

    2.1 单独一个条件.单独.

    try:

      num= int(input(">>>")) #ValueError

      name   #NameError

      dic = {}

      dic["key"]  #KeyError

    except NameError:

      print("出现了NameError错误")

    print(11111)

    print(22222)

    print(6666)

    2.2 多分支

    try:

      num = int(input(">>>"))  #ValueError

      name   #NameError

      dic = {}

      dic["key"]

    except NameError:

      print("出现了NameError错误")

    except ValueError:

      print("出现了ValueError错误")

    except KeyError:

      print("出现了KeyError错误")

    print(2222)

    print(4444)

    print(6666)

    class A:

      def __str__(self):

        return "list index out of range"

    a = A()

    print(a)

    3.万能异常处理

    try:

      num = int(input(">>>"))  #ValueError

      name   #NameError

        dic = {}
           dic['key']    # KeyError

    except Exception as e:

      print("你输入的不规范,请重新输入...)

    异常处理的两种结局方式:

    1.只是显示错误信息,不终止程序就行.    用万能的.

    2.针对不同的错误,提示不同的信息,进行不同的操作.  用多分支 + 万能

    def  login():

      pass

    def  regsiter():

      pass

    def  article():

      pass

    def dariy():

      pass

    dic = {

       1:login,

       2:regsiter,

       3:article,

       4:dariy,

    }

    while True:

      choice = input("请输入")

      if choice.isdigit():

        choice = int(choice)

        if 1<= choice <=4:

          dic[choice]()

        else:

          print("请输入范围内的数字")

      else:

        print("请输入数字...")

    while True:

      try:

        choice = int(input("<<<<"))

        dic[choice]()

      except ValueError:

        print("请输入数字...")

      except KeyError:

        print("请输入范围内的数字")

    while True:

      try:

        choice = int(input("请选择"))

        dic[choice]()

      except:      #这样写会报错,改成except Exception as e:这样就不会报错了

        print("请输入数字")

      except:

        print("请输入范围内的数字")

    4.多分支 + 万能

    while True:

      try: 

        choice = int(input('请输入:'))
        dic[choice]()
      except ValueError:
        print('请输入数字...')
      except Exception as e:
        print(e)
      except KeyError:
        print('请范围内的数字...')

    try:
      choice = int(input('请输入:'))
    except ValueError:
      print('请输入数字...')
    except KeyError:
      print('请范围内的数字...')
    except Exception as e:
      print(e)

    2.5 try except except ....else

    如果程序出现异常执行except,就不会执行else,反之则执行else.

    try:

      print("我的卡扣除了100元")

      #name

      print("徐哥的卡增加了100元")

    except NameError:

      print("转账出现异常")

    else:

      print("转账成功")

    2.6

    try except except.... else  .finally

    try finally

    try:

      print("我的卡扣除了100元")

      #name

      print("旭哥的卡增加了100元")

    except NameError:

      print("转账出现异常...")

    else:

      print("转账成功")

    finally:

      print(666666)

    try:

      name

    finally:

      print(6666)

    出现错误先执行finally语句,经常用于关闭文件句柄,关闭数据库的连接,关闭网络链接等等.

    try:

      f = open("t1",encoding = "utf-8")

      print(f.read())

      """多个文件句柄的操作"""

      f.write()

    finally:

      f.close()

      print(666)

    def func():

      try:

        return  555

      finally:

        """代码块"""

        print(666)

    func()

    try finally  出现错误先执行finally语句,经常应用于关闭文件句柄,关闭数据库,关闭网络连接等等.

    2.7 主动触发异常

    raise TypeError("类型错误")

    class Payment:

      def pay(self,money):

        raise TypeError 3("类中应该用一个pay方法")

    class  QQ(Payment):

      def pay(self,money):

        print("你用qq支付了%s元"% money)

    class Wechat(Payment):

      def pay(self,money):

        print("你用微信支付了%s元"%money)

    def pay(obj,money):

      obj.pay(money)

    q = QQ()

    w = Wechat()

    pay(w,1000)

    2.8 自定义异常(大项目,针对于python不具备的一些错误类型)

    raise TypeError("类型错误")

    name1 : python解释器没法解决的错误: nana

    class nana(BaseException):

      def __init__(self.msg):

        self.msg = msg

      def __str__(self):

        return self.msg

    try:

      raise nana("出错了")

    except nana as e:  #e = nana("出错了")

      print(e)

    断言 源码 主动抛出异常

    condition = 1 > 2

    assert condition #如果条件不满足强行终止

    print(1111)

    print(22222)

    print(6666)

    """

    1,try ...except 单个情况
    2,try except except..... 多分支,针对多个你已知的异常,分别导向不同的代码. *
    3,try except Exception as e: 万能异常处理. 你对出现的异常错误未知,你要用万能的. *
    # 1,只是显示错误信息,不终止程序就行. 万能的
    # 2,针对不同的错误,提示不同的信息,进行不同的操作. 多分支,多分支+ 万能
    4,try except except except Exception as e: 多分支 + 万能 *

    5,try except except... else 出现异常就不执行else代码反之则执行.
    6,
    try except except... else,finally 不常用
    try finally * 涉及到关闭文件句柄,网络链接,数据库链接等等.
    7, raise
    8, 自定义异常处理.
    9 assert

    """

  • 相关阅读:
    丰富eclipse注解的内容
    ThreadLocal总结
    算法+结构?设计模式?
    面试需要准备内容
    HIbernate-0.8版本源码翻看
    2019第一篇博文
    随笔
    Expert one on one 读书笔记之容器
    Expert one on one development without ejb读书笔记
    Mysql索引部分学习关于多列索引的部分
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9300688.html
Copyright © 2011-2022 走看看