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

    异常处理

    错误

    -语法错误

    -逻辑错误

     

    异常

    异常就是程序运行错误时发出的信号

    异常处理:

    1,if 可以进行异常处理,但是有一下缺点:

    -重读代码

    -可读性差

    2,try   except 处理异常

     

    try:

      被检测的代码块

    except 异常类型:

       try中一旦检测到异常,执行到这个位置的逻辑

     

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)
    except ValueError as e:
    print(e)
    print('1')
     

    运行后:

    1==>:1 #输入1,符合逻辑会继续执行下边代码
    2===>:sw #不符合逻辑,会直接跳到异常处理except 处进行,执行完毕会跳出异常处理继续执行下边代码
    invalid literal for int() with base 10: 'sw'

    1

    -异常类只能用来处理指定的异常情况,如果非指定异常则无法处理.未捕捉到异常,程序直接报错

    -多分枝:碰到指定异常直接处理,处理完毕直接跳出异常执行下边代码

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)

    l = []
    l[10000]

    except ValueError as e:
    print(e)
    except IndexError as e:
    print(e)

    print('11111')

    1==>:1
    2===>:2
    list index out of range
    11111

    -万能异常 Exception,碰到有异常就直接处理

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)

    l = []
    l[10000]

    except Exception as e:
    print(e)

    print('11111')

    1==>:we #异常
    invalid literal for int() with base 10: 'we'#处理异常
    11111

    **********************

    -else 异常处理中的else代表代码无异常会输出else的代码

    try:
    age = input('1==>:')
    int(age)

    except ValueError as e:
    print(e)
    except Exception as e:
    print(e)
    else:#代码无异常会输出else
    print('代码无异常')

    print('11111')

    1==>:1
    代码无异常
    11111

    *****************

    -finally 在处理异常中,无论代码是否有异常都会执行finally模块代码,通常是用于清理工作。如下:

    try:
    age = input('1==>:')
    int(age)

    except Exception as e:
    print(e)
    else:
    print('代码无异常')
    finally:
    print('无论是否有异常,都会执行此模块,通常是进行清理工作')

    print('11111')

    /usr/local/bin/python3.7 /Users/chen/PycharmProjects/untitled1/day23/test.py
    1==>:de
    invalid literal for int() with base 10: 'de'
    无论是否有异常,都会执行此模块,通常是进行清理工作
    11111

    *************************

    1==>:1
    代码无异常
    无论是否有异常,都会执行此模块,通常是进行清理工作
    11111

     

    自定义异常

    自定义异常:代码如下:

    class 异常名(异常基类): #此处的异常基类:比如 BaseException,Exception, LookupError等等。

     

      def __init__(self,msg):

        self.msg =msg

    例如:输入的字符串,不会报错,不是字符串格式,会报错,代码如下:

    class Egonexception(BaseException):
    def __init__(self,msg):
    self.msg = msg

    def __str__(self):
    return self.msg

    try:
    raise Egonexception('23')
    except Egonexception as e:
    print(e)#=====》结果是23 因为输入的'23'是字符串格式.

    断言

    assert 条件

     assert 报错,下边的代码不执行。

    s=4
    print('====>')
    assert s==4 #此代码相当于以下2行if代码:
    #if s !=4:
    #raise AssertionError

    print('====>')
    结果是:

    ====>
    ====>

    ******************

    若s =5

    s=5
    print('====>')
    assert s==4
    print('====>')

    结果是:

    ====>

    AssertionError #报错程序无法继续往下运行

     

     

    使用try...except 的方式优点:

    1,把错误处理和真正的工作分开来

    2,代码更容易组织,更清晰,复杂的工作任务更容易实现

    3,更安全了,不至于由于一些小的疏忽而使程序意外崩溃。

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    fastdfs部署及官网
    fasrdfs在spring cloud中的使用
    面包屑的查询
    SpringCloud中使用ES使用课程上下线
    Redis中在项目中的使用
    树结构Tree查询
    平凡的世界 田晓霞的日记 摘抄

    英语积累
    英语学习第四天
  • 原文地址:https://www.cnblogs.com/wode110/p/14875448.html
Copyright © 2011-2022 走看看