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

    day21 03 异常处理

    1.什么是异常

    异常:程序运行时发生错误的信号

    错误:语法错误(一般是不能处理的异常)

               逻辑错误(可处理的异常)

    特点:程序一旦发生错误,就从错误的位置停下来,不再继续执行后面的内容

    2.怎么处理异常呢?

    比如下面类型代码的异常:

    ret=int(input('number >>>'))
    print(ret*'*')

    如果执行后用户输入的不是数据就会报错:

    number >>>a
    Traceback (most recent call last):
      File "<encoding error>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'a'

    可以看到这个错误类型是:ValueError

    处理的方法:

    try:#异常处理语句
        ret=int(input('number >>>'))#把认为有异常错误需要处理的内容放在try.....except 错误类型的机制里面
        print(ret*'*')
    except ValueError:#捕获错误的类型 异常处理语句,只能处理对应的错误
    print('您输入的内容错误,请输入一个数字')

    当再次输入错误的内容时,它不会标红报错,而是给你提示,就显得比较友好:

    number >>>a
    您输入的内容错误,请输入一个数字

    使用try和except就能处理异常:

         try是我们要处理的代码,从前面开始执行,如果有多个错误,遇到第一个错误时就停止了,后面的错误就不会处理了

         except后面跟一个错误类型,当代码发生错误且错误类型符合的时候,就会执行except中的代码

         except是支持多分支

        有没有一个能处理所有错误的类型万能机制:Exception:

                只告诉了在哪里错了,但是你不知道在哪里出错了,比较笼统

                所以有了这个万能处理机制,仍需要把能预测到的问题单独处理

                单独处理的所有内容都应该写在万能异常之前

    try:
        print('111')
        1/0
        [][3]
        int('a')
        {}['key']
        print('222')
        ret=int(input('number >>>'))
        print(ret*'*')
    except Exception:
        print('你错了,老铁')
    except ValueError:
        print('您输入的内容错误,请输入一个数字')
    #如果将这个分支放到万能异常的后面,如果有错误,就会先找到万能异常机制,就不会走下面分支了,
    # 也就不会具体提醒了,即这个分支也就失效了
    111
    你错了,老铁

    如果将分支机制放在万能机制的前面,当try里面真的有分支对应的错误类型的时候就会具体给出提示

         else:没有异常执行else里面的代码

    try:
        ret=int(input('number >>>'))
        print(ret*'*')
    except ValueError:
        print('您输入的内容错误,请输入一个数字')
    except KeyError:
        print('请输入正确的格式')
    except Exception:
        print('你错了,老铁')
    else:
        print('没有异常的时候执行else里面的代码')

    假如输入一个正确的:

    number >>>5
    *****
    没有异常的时候执行else里面的代码

         finally:不管代码是否异常,都会执行

    try:
        ret=int(input('number >>>'))
        print(ret*'*')
    except ValueError:
        print('您输入的内容错误,请输入一个数字')
    except KeyError:
        print('请输入正确的格式')
    except Exception:
        print('你错了,老铁')
    else:
        print('没有异常的时候执行try里面的代码')
    finally:
        print('====')

    假如输入一个正确的:

    number >>>10
    **********
    没有异常的时候执行try里面的代码
    ====

     输入一个错误的:

    number >>>a
    您输入的内容错误,请输入一个数字
    ==== #输入的a不符合还是会执行
  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/wxm422562/p/10810080.html
Copyright © 2011-2022 走看看